2009-06-12 14 views
51

Así que quiero traer un controlador de vista modal que tenga una UITextView y quiero que el teclado aparezca automáticamente y que UITextView tenga foco.¿Cómo le doy un enfoque UITextView programáticamente?

he encontrado una manera de lograr esto haciendo lo siguiente:

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

Esto sólo parece hacky a mí, ¿hay otra manera?

Respuesta

147

Desde UITextView hereda de UIResponder (indirectamente, en realidad se hereda de UIScrollView, que hereda de UIView cuales continuación hereda de UIResponder) se puede llamar al método -becomeFirstResponder en el campo de texto, lo que hará que se convierta en el primer nivel de respuesta y comience a editar:

[textView becomeFirstResponder]; 
11

Eso parece algo hackish.

La terminología de Cocoa Touch para 'tener foco' es 'primera respuesta' y UITextView s mostrará sus teclados cuando sean los primeros en responder. Se me ocurren varias técnicas para hacer el UITextView convertirse en el primer nivel de respuesta, pero la más sencilla es probablemente en viewWillAppear o viewDidAppear métodos de su controlador de vista:

 
- (void)viewWillAppear:(BOOL)animated 
{ 

    [myTextView becomeFirstResponder]; 

    [super viewWillAppear:animated]; 
} 
+0

viewDidAppear funcionó para mí, pero no viewWillAppear. Preguntarse por qué... –

7
[textView becomeFirstResponder]; 
13

Swift:

textView.becomeFirstResponder() 
0

Cuando quiero que el foco sea ese TextView particular al cargar un ViewController, puede colocar el textView.becomeFirstResponder() en el funcion Overrode ViewDidLoad como se muestra a continuación:

override func viewDidLoad() { 
    super.viewDidLoad() 

textView.becomeFirstResponder() 

} 

Me parece que esto funciona sin ningún error

Cuestiones relacionadas