2012-08-11 6 views
11

¿Hay alguna manera de que un UITextField se convierta en el primero en responder sin la animación del teclado? Es decir, haz que el teclado simplemente aparezca?Conviértase en el primer respondedor sin animación

Básicamente, estoy empujando un segundo UIViewController sobre el UIViewController que tiene el UITextField, y cuando ese segundo controlador de vista se hizo estallar de la pila, quiero que el UITextField de inmediato es la primera condición de respuesta de manera que cuando el segundo controlador de vista aparece, el usuario nunca nota que el campo de texto no fue el primero en responder.

Ahora mismo lo tengo para que cuando se abre, el teclado anime la pantalla, pero no quiero que se vea.

¿Alguna idea?

Respuesta

14

Se puede utilizar una animación UIView al igual que

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

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

[UIView commitAnimations]; 

Esto hará que aparezca de repente el teclado.

Usted puede hacer lo mismo pero con -resignFirstResponder

Swift ..

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

Espera, ¿qué es UIView? ¿Es algo así como 'self.view', o es el' UITextField'? Además, ¿debería poner esto en 'viewWillAppear'? –

+0

UIView hace referencia a la clase. La única parte que necesita cambiar es 'textField'. Este debería ser el nombre del UITextField que desea para hacer el firstResponder –

+0

Hm Lo hice, pero nada ha cambiado ... Creo que el controlador de vista con el campo de texto ya está cargado. Cuando se crea la vista, aparece instantáneamente como debería, pero cuando regreso a este controlador de vista desde otro controlador en la pila, ya está cargada, así que esto nunca sucede. Puse este código en 'viewWillAppear'. ¿Que debería hacer? –

1

Sólo establecerlo como el primer nivel de respuesta en -viewDidAppear para que el usuario nunca se dio cuenta el campo después de haber perdido su condición.

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

He puesto un proyecto de ejemplo corto arriba en dropbox utilizando este código, si lo desea ella.

+0

Olvidaste llamar '[super viewWillAppear: animated]' - podría causarte algunos problemas en el camino. También llamando 'a sí mismo.ver' para comprobar si existe en el controlador de vista activará la creación de vista, es mejor usar '[self isViewLoaded]'. Finalmente, en este caso particular, el hecho de que estés dentro del método 'viewWillAppear' dice que ya se creó view –

+0

Nevermind, olvidando mi iOS básico. Además, la comprobación selfviewer _no_ fuerza una creación de vista (probada solo ahora), porque se llama a -loadView cuando la vista del controlador de vista es nula, que es lo que estoy comprobando en primer lugar. – CodaFi

0

estoy, mot seguro de qué versión de IOS usa usted o en qué momento te llaman becomeFirstResponder Calling [textFieldReference becomeFirstResponder] en viewWillAppear: para IOS5/iOS6 parece funcionar de la manera que quería que:

que está siendo llamado justo antes de ver el controlador mostrará su vista (eso es si no maneja la jerarquía del controlador de vista manualmente) y tan pronto como aparezca en el teclado del controlador de navegación ya se haya presentado y el campo de texto tenga foco.

Dicho esto, no hay una forma pública que haya escuchado que permita especificar el estilo de apariencia del teclado.

+0

La manera pública es la envoltura de Animación principal de UIView como en la respuesta de @ NSArray. – CodaFi

+0

Estoy usando iOS 5.0, aunque cuando lo intenté, nada cambió ... –

Cuestiones relacionadas