2012-05-20 11 views
23

Estoy tratando de configurar la animación para que la vista se mueva cuando el teclado se esconde y aparece para los campos de texto, y lo hice funcionar perfectamente bien, pero cuando el foco se mueve desde un campo de texto para otro, no funciona ya que el teclado ya se mostró.Detectar cambio de foco para UITextField

En viewDidLoad, I registro de:

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

y luego en los métodos keyboardWillShow y keyboardWillHide, determina si la vista debe moverse o no y animar en consecuencia. Pero si ya se mostró un teclado y el usuario hace clic en otro campo de texto que necesita la vista para moverse hacia arriba, no se llamará al método. ¿Hay alguna manera de detectar si un foco ha sido cambiado a otro campo de texto cuando el teclado ya se mostró? Sería genial si hay una forma de hacerlo sin tener que configurar todos los campos de texto para delegados.

Gracias de antemano.

Respuesta

57

Utilice los métodos de delegado UITextField .. su mejor en su caso de los métodos de teclado .. cuando textField consiguió enfocar la - (void)textFieldDidBeginEditing:(UITextField *)textField; será despedido .. y cuando se pierde el foco - (void)textFieldDidEndEditing:(UITextField *)textField; será despedido.

+1

Gracias por la respuesta. Si hago esto, ¿hay alguna manera de obtener la información del usuario? Porque en esos métodos obtuve el UIKeyboardAnimationDurationUserInfoKey y el UIKeyboardFrameEndUserInfoKey del userInfo para configurar la animación, pero no estoy seguro de cómo podría hacer lo mismo cuando no se transfiera ninguna notificación como parámetro. – Dennis

+0

¿Cuál es el tipo de información que necesita? –

+1

UIKeyboardAnimationDurationUserInfoKey, para el tiempo de duración de la animación del teclado (por lo que la animación del movimiento de la vista podría coincidir) y UIKeyboardFrameEndUserInfoKey para obtener el alto del teclado. No quería codificar los valores. – Dennis

6
-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField { 
if (textField.tag == 1) { //first textField tag 
    //textField 1 
} 
else { 
    //textField 2 
} 
} 
1

Uso UITextFieldDelegate

y

func textFieldDidBeginEditing(textField: UITextField) { 
     println("did") 
     if textField.tag == 1{ 
      self.txtFullName.layer.borderColor = UIColor.blueColor().CGColor 
     } 
    } 
+0

En realidad es func textFieldDidBeginEditing (_ textField: UITextField) {la firma de la función – leofontes

Cuestiones relacionadas