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
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
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