2012-08-11 3 views
11

Y at-il un moyen pour un UITextField de devenir le premier répondeur sans l'animation du clavier? Autrement dit, faites en sorte que le clavier apparaît juste?Devenir le premier répondeur sans animation

Fondamentalement, je pousse une seconde UIViewController sur la UIViewController qui a le UITextField, et quand ce second contrôleur de vue se sauté de la pile, je veux le UITextField d'avoir immédiatement le statut de première répondeur de sorte que lorsque le second contrôleur de vue se fait sauter, l'utilisateur ne remarque jamais que le champ de texte n'était pas le premier répondeur.

À l'heure actuelle, je l'ai pour que, quand il est sauté, le clavier anime l'écran, mais je ne veux pas que cela soit vu.

Des idées?

Répondre

14

Vous pouvez utiliser une animation UIView comme si

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.0]; 
[UIView setAnimationDelay:0.0]; 
[UIView setAnimationCurve:UIViewAnimationCurveLinear]; 

[textField becomeFirstResponder]; // <---- Only edit this line 

[UIView commitAnimations]; 

Cela entraînera le clavier apparaisse soudainement.

Vous pouvez faire la même chose mais avec -resignFirstResponder

Swift ..

UIView.beginAnimations(nil, context: nil) 
    UIView.setAnimationDuration(0.0) 
    UIView.setAnimationDelay(0.0) 
    someTextView.resignFirstResponder() 
    UIView.commitAnimations() 
+0

Attendez-vous à ce que UIView? Est-ce quelque chose comme 'self.view', ou est-ce le' UITextField'? Aussi, devrais-je juste mettre cela dans 'viewWillAppear'? –

+0

UIView fait référence à la classe. La seule partie que vous devez changer est 'textField'. Cela devrait être le nom de l'UITextField que vous voulez faire le firstResponder –

+0

Hm je l'ai fait, mais rien n'a changé ... Je pense que le fait est que le contrôleur de vue avec le champ de texte est déjà chargé. Lorsque la vue est créée, elle apparaît instantanément comme elle devrait l'être, mais quand je retourne à ce contrôleur d'un autre contrôleur de la pile, il est déjà chargé, donc cela n'arrive jamais. J'ai mis ce code dans 'viewWillAppear'. Que devrais-je faire? –

1

Tout comme défini le premier intervenant dans -viewDidAppear de rendre l'utilisateur ne remarquent jamais le champ ayant perdu son statut.

-(void)viewWillAppear:(BOOL)animated { 
    if ([self isViewLoaded] && self.textField) 
     [self.textField becomeFirstResponder]; 
     [super viewWillAppear:animated]; 
} 

J'ai mis un projet à court échantillon sur dropbox en utilisant ce code, si vous le souhaitez.

+0

Vous avez oublié d'appeler '[super viewWillAppear: animated]' - pourrait vous causer quelques problèmes sur la route. Aussi appelé 'self.view' pour vérifier si elle existe sur le contrôleur de vue déclenchera la création de vue, il est préférable d'utiliser '[self isViewLoaded]'. Enfin, dans ce cas particulier le fait que vous êtes dans la méthode 'viewWillAppear' indique que la vue a déjà été créée –

+0

Nevermind, en oubliant mon iOS de base. En outre, la vérification de self.view ne force pas une création de vue (testée juste maintenant), car -loadView est appelée lorsque la vue de View Controller est nulle, ce que je vérifie en premier lieu. – CodaFi

0

Je suis, mot sûr de la version iOS utilisez-vous ou à quel moment appelez-vous becomeFirstResponder Appel [textFieldReference becomeFirstResponder] à viewWillAppear: pour iOS5/iOS6 semble fonctionner comme vous le vouliez à:

c'est d'être appelé juste avant que le contrôleur de vue affiche sa vue (si vous ne gérez pas manuellement la hiérarchie du contrôleur de vue) et dès qu'il apparaît dans le clavier du contrôleur de navigation est déjà présenté et le champ de texte a le focus. Cela dit, il n'y a aucun moyen public que j'ai entendu off qui permettrait de spécifier le style d'apparence du clavier.

+0

La voie publique est le wrapper Core Animation de UIView comme dans la réponse de @ NSArray. – CodaFi

+0

J'utilise iOS 5.0, mais quand j'ai essayé ça n'a rien changé ... –

Questions connexes