Cela défilera bien votre UITextView vers le haut du clavier lorsque l'édition commence. Cela fonctionnera également si votre UITextView a une hauteur dynamique (autogrow/autosize lors de la frappe). Testé dans iOS 7.
Appelez votre méthode d'observation du clavier et délégué UITextView à la classe actuelle:
- (void)viewDidLoad
{
...
[self observeKeyboard];
textView.delegate = (id)self;
}
Ajouter observateur du clavier pour UIKeyboardDidShowNotification et UIKeyboardWillShowNotification:
- (void)observeKeyboard
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
}
Obtenir la taille du clavier:
- (void)keyboardWillShow:(NSNotification *)notification
{
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
_keyboardHeight = keyboardSize.height;
}
- (void)keyboardDidShow:(NSNotification *)notification
{
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
_keyboardHeight = keyboardSize.height;
}
Lorsque UITextView a démarré l'édition n ou la valeur a changé appel scrollKeyboardToTextView
:
- (void)textViewDidBeginEditing:(UITextView *)textView
{
[self scrollKeyboardToTextView:textView];
}
- (void)textViewDidChange:(UITextView *)textView
{
[self scrollKeyboardToTextView:textView];
}
Faire défiler UITextView avec animation à la partie supérieure du clavier:
- (void)scrollKeyboardToTextView:(UITextView *)textView
{
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, _keyboardHeight, 0.0);
self.scrollView.contentInset = contentInsets;
self.scrollView.scrollIndicatorInsets = contentInsets;
CGRect aRect = self.view.frame;
aRect.size.height -= _keyboardHeight;
CGPoint origin = textView.frame.origin;
origin.y -= self.scrollView.contentOffset.y;
origin.y += textView.frame.size.height;
CGPoint scrollPoint = CGPointMake(0.0, textView.frame.origin.y + textView.frame.size.height - (aRect.size.height));
[self.scrollView setContentOffset:scrollPoint animated:YES];
}
J'ai eu une lecture de cette page avant, et n'était pas sûr si elle appliquait , comme il avait une vue de défilement avec un tas de champs de texte. J'ai seulement un UITextView comme vue principale dans ma plume. De plus, ces solutions semblaient trop complexes, y a-t-il un réglage simple qui nous manque ici? – Chris
Dans votre cas, pour vous assurer qu'il reste visible, vous devrez redimensionner votre champ de texte lorsque le clavier affiche et redimensionner à nouveau lorsqu'il se cache. Voir le code dans ma mise à jour et voir si cela vous aide. – faroligo
@Chris: Un UITextView est un scrollview, donc les mêmes techniques s'appliquent. Il n'y a pas de simple "magie faire ce que je veux dire" pour vous. – hotpaw2