2010-08-16 4 views
4

J'utilise un truc pour superposer le clavier avec le mien. Fondamentalement, j'ajouter quelques boutons comme Subviews au clavier. Voici comment je trouve le UIView du clavier:Comment obtenir le clavier UIView sur iPhone, iOS 3.2 ou plus récent

UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1]; 
UIView* keyboard; 
for(UIView* potentialKeyboard in tempWindow.subviews) 
    // if the real keyboard-view is found, remember it. 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) { 
     if([[potentialKeyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) 
      keyboard = potentialKeyboard; 
     } 
     else { 
      if([[potentialKeyboard description] hasPrefix:@"<UIKeyboard"] == YES) 
       keyboard = potentialKeyboard; 
    } 

Cette méthode est appelée par le UIKeyboardDidShowNotification. Je préfère l'appeler par UIKeyboardWillShowNotification, puisque la version "Did" montre après que le clavier original soit montré à l'utilisateur. Mais si j'utilise la même procédure que ci-dessus, cela génère une erreur EXC_BAD_ACCESS. Apparemment, la vue du clavier n'est pas trouvée correctement.

Maintenant ma question: Y at-il un moyen d'accéder à l'UIView du clavier au moment où UIKeyboardWillShowNotification est lancé.

Merci à l'avance

Répondre

3

J'ai ajouté simplement utilisé cette [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow) name:UIKeyboardWillShowNotification object:nil];

et

- (void)keyboardWillShow { [self performSelector:@selector(addHideKeyboardButtonToKeyboard) withObject:nil afterDelay:0]; } .

Ceci est appelé lorsque le clavier va apparaître.

+0

Cela a fonctionné, même si j'ai l'impression que cela pourrait causer des problèmes. C'est juste un feelig, mais je pense que delay: 0 pourrait appeler le sélecteur trop vite ... Mais bon, ça marche. En fin de compte, j'ai dû utiliser les deux: keyboardWillShow avec le delay pour que le clavier apparaisse superposé et le keyboardDidShow pour qu'il reste comme ça. D'une façon ou d'une autre, la superposition a disparu une fois la vue entièrement chargée. Mais de toute façon cela fonctionne. Merci. – Bujtor

+0

Lors de l'utilisation de performSelector: afterDelay: le thread principal gère l'appel, et parce que l'animation uikeyboard est appelée par le thread principal, vous devez attendre qu'il se termine, pour cela, utilisez un execSelector: afterDelay: – Simon

Questions connexes