2010-07-18 5 views
0

J'ai un contrôleur de vue pour une vue avec six UITextFields. Chaque fois que l'utilisateur sélectionne un champ de texte, j'ai besoin de faire défiler les choses vers le haut. Ainsi, les champs de texte définissent tous le contrôleur de vue comme leurs délégués respectifs. Lorsque la méthode déléguée se déclenche, elle appelle une méthode de défilement pour faire défiler les choses vers le haut (si le clavier apparaît) ou vers le bas (si elle disparaît). La méthode de défilement ressemble à ceci:Éviter le défilement lors de la commutation entre les champs de texte

- (void) scroll: (CGFloat) distanceUp { 
    [UIView beginAnimations:@"Scroll" context:NULL]; 
     //move some stuff up by distanceUp, or down if distanceUp is negative. 
    [UIView commitAnimations]; 
} 

Si l'utilisateur sélectionne un champ de texte, entre une valeur, puis frappe le bouton DONE sur le clavier, cela fonctionne très bien.

Le problème survient lorsque l'utilisateur passe directement d'un champ de texte directement à un autre. Dans ce cas, ce qui se passe est que la vue saute vers le bas, puis défile vers le haut. Évidemment, je préférerais que cela reste en place. Comment est-ce que je le fais faire ça?

+0

Il semble que ce soit un problème en simulateur seulement (je l'ai déjà rencontré), avez-vous testé sur l'appareil? – vodkhang

+0

Avez-vous envisagé d'utiliser un scrollView en tant que parentView pour tout ce qui nécessite un défilement? Vous pouvez utiliser UIKeyboard-Notificatins au lieu des délégués textFields pour déterminer quand le défilement est nécessaire. – tonklon

Répondre

1

Comme suggéré par le commentateur tonclon, ce que j'ai fait était d'utiliser les notifications UIKeyboard au lieu des délégués de champ de texte. En viewDidLoad, je donne les résultats suivants:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow) name:UIKeyboardWillShowNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide) name:UIKeyboardWillHideNotification object:nil]; 

Les méthodes keyboardWillShow/masquer appellent le défilement vers le haut/bas.

Je désinscrit à la fois viewDidUnload et dealloc. [Et je ne suis pas sûr si ces deux désenregistrements sont nécessaires.]