Ceci est un sujet assez commun et a beaucoup de réponses là-bas.barre d'outils sur le dessus du clavier avec premier répondeur
Situation: J'ai un plein écran (barre d'outils moins) UITextView avec un UIToolbar en bas. Quand UITextView reçoit le premier répondeur, je veux faire glisser la barre d'outils vers le haut avec le clavier et ajouter un bouton "done" qui fermera le clavier.
Jusqu'ici: Je l'ai complètement fonctionnant, basé sur this example. Excepté le fait que lorsque je mets [textView becomeFirstResponder];
dans mon viewDidLoad
alors la barre d'outils ne s'anime pas. Même si keyboardWillShow
est appelée. Est-ce que quelqu'un a une idée?
code: Juste pour que vous ne devez pas vérifier le code exemple ceci est ce qui se passe:
En viewDidLoad:
- (void)viewDidLoad {
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[nc addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
[textView becomeFirstResponder];
[super viewDidLoad];
}
En keyboardWillShow:
- (void)keyboardWillShow:(NSNotification *)notification {
NSLog(@"keyboard will show");
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]];
[UIView setAnimationDuration:[[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:self
action:@selector(keyboardDone)];
NSMutableArray *toolbarItems = [NSMutableArray arrayWithArray:[toolbar items]];
[toolbarItems addObject:doneButton];
[toolbar setItems:toolbarItems];
CGRect frame = self.view.frame;
frame.size.height -= [[[notification userInfo] objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue].size.height;
self.view.frame = frame;
[UIView commitAnimations];
}
Vous êtes incroyable! Je vous remercie. Cela ne fonctionne pas dans -viewWillAppear: animé: mais avec -viewDidAppear: animé. Je ne connaissais pas l'ordre dans lequel ils étaient chargés, alors merci de m'avoir appris quelque chose de nouveau aujourd'hui. – RyanJM