iphone - Detectar cambio de enfoque para UITextField
ios ios5 (4)
En Swift 4:
- Implemente
UITextFieldDelegate
en su claseViewController
- Agregue las salidas para los
textFields
que desea detectar el enfoque - Implemente la función
textFieldDidBeginEditing
(en caso de que desee recibir una notificación sobre esa acción específica, consulte la documentación de Apple ) y rellénela con su código - En
viewDidLoad()
asigne su claseViewController
como delegado para el campo detextField
que agregó anteriormente en el paso 2
Debe parecerse a:
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var yourTextField: UITextField!
func textFieldDidBeginEditing(_ textField: UITextField) {
// Your code here
}
override func viewDidLoad() {
super.viewDidLoad()
yourTextField.delegate = self
}
...
}
Estoy tratando de configurar la animación para que la vista se mueva hacia arriba cuando el teclado se oculta y aparece en los campos de texto, y funcionó perfectamente bien, pero cuando el enfoque se mueve de un campo de texto a otro, no funciona. ya que el teclado ya estaba mostrado.
En viewDidLoad, registré lo siguiente:
[[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 debería moverse o no y animarse en consecuencia. Pero si ya se mostró un teclado y el usuario hace clic en otro campo de texto que necesita que la vista se mueva hacia arriba, no se llamará al método. ¿Hay alguna forma de detectar si se ha cambiado el enfoque a otro campo de texto cuando ya se mostró el teclado? Sería genial si hubiera una manera de hacerlo sin tener que configurar todos los campos de texto para delegados.
Gracias por adelantado.
Use los métodos de delegado de UITextField
. Es mejor en su caso que los métodos de teclado. Cuando textField enfocó el - (void)textFieldDidBeginEditing:(UITextField *)textField;
se disparará ... y cuando se pierda el foco - (void)textFieldDidEndEditing:(UITextField *)textField;
será despedido
Utilice UITextFieldDelegate
y
func textFieldDidBeginEditing(textField: UITextField) {
println("did")
if textField.tag == 1{
self.txtFullName.layer.borderColor = UIColor.blueColor().CGColor
}
}
-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField {
if (textField.tag == 1) { //first textField tag
//textField 1
}
else {
//textField 2
}
}