Clavier de Défilement sur les Actifs du Champ de Texte de Défilement de la Vue?

J'ai une application avec une vue qui a des champs de texte à partir du haut de la vue vers le bas de la vue. J'en avais besoin pour faire défiler lors de l'édition des bas champs, de sorte que les champs seraient visibles, mais ce n'est pas en faisant semblant de travailler correctement.

À la suite de la Apple docs, j'ai placé tous de ce code dans mon programme (Listes de 4-1, 4-2), et a ajouté l' scrollView et activeField points de vente de mon fichier d'en-tête et lié à l'IB.

Le problème est que dès que je clique dans un champ de texte, TOUS les champs de texte à aller hors de la vue jusqu'à ce que je fermer le clavier. Ils ont faites défiler vers le bas très loin (encore une fois, assez loin de là où aucun des champs n'est visible).

Personne ne sait ce que le problème pourrait être causé par?

Je suis placer le code dans ici à partir de l'Apple Docs de sorte que vous pouvez voir exactement ce que le code que j'utilise sans avoir à cliquer.

//my .h
IBOutlet UIScrollView *scrollView;
IBOutlet UITextField *activeField;
//.m
//Call this method somewhere in your view controller setup code.
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
}
//Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
//If active text field is hidden by keyboard, scroll it so it's visible
//Your application might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
[scrollView setContentOffset:scrollPoint animated:YES];
}
}
//Called when the UIKeyboardWillHideNotification is sent
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
activeField = textField;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
activeField = nil;
}
J'ai édité le copier-coller de la Pomme du code à partir de votre poste, car il est douteux que SI l'autorisation de la Pomme de la reproduire. J'ai aussi marqué pour un modérateur afin de prendre un coup d'oeil, je ne suis pas certain de ce que la politique officielle est ou devrait être.
Cette petite quantité de code est probablement OK, pour le "Fair use" fins.
Ok, merci. James, je suppose que cela signifie que vous doit le remettre si vous le souhaitez. Désolé pour la peine.
Au lieu de: CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height); [scrollView setContentOffset:scrollPoint animated:YES]; je trouve que l'utilisation de la suite fonctionne beaucoup mieux: [scrollView scrollRectToVisible:activeField.frame animated:YES];

OriginalL'auteur Baub | 2011-08-25