2009-06-12 9 views
51

Donc, je veux introduire un contrôleur de vue modale qui a un UITextView et je veux que le clavier apparaisse automatiquement et que UITextView ait le focus.Comment donner un focus UITextView par programme?

J'ai trouvé un moyen d'y arriver en procédant comme suit:

textView.editable = YES; 
textView.editable = NO; 

Ce que semble hacky pour moi, est-il une autre façon?

Répondre

147

Depuis UITextView hérite de UIResponder (indirectement, il hérite en fait de UIScrollView, qui hérite de UIView qui alors hérite de UIResponder) vous pouvez appeler la méthode -becomeFirstResponder sur votre champ de texte, qui le fera devenir le premier répondeur et commencer à éditer:

[textView becomeFirstResponder]; 
11

Cela semble quelque peu hackish. La terminologie Cocoa Touch pour 'avoir le focus' est 'premier répondeur' et UITextView s affichera ses claviers quand ils sont le premier répondeur. Je peux penser à plusieurs techniques pour faire le UITextView devenir le premier intervenant, mais le plus simple est probablement dans votre viewWillAppear de contrôleur de vue ou les méthodes viewDidAppear:

 
- (void)viewWillAppear:(BOOL)animated 
{ 

    [myTextView becomeFirstResponder]; 

    [super viewWillAppear:animated]; 
} 
+0

viewDidAppear a fonctionné pour moi, mais pas viewWillAppear. Se demander pourquoi... –

7
[textView becomeFirstResponder]; 
13

Swift:

textView.becomeFirstResponder() 
0

Lorsque vous vous voulez que le focus soit tel que TextView particulier lors du chargement d'un ViewController, vous pouvez placer le textView.becomeFirstResponder() dans la fonction override de ViewDidLoad comme suit:

Je trouve que cela fonctionne sans aucune erreur

Questions connexes