iphone objective-c ios xcode first-responder

iphone - uitextfielddelegate



La tecla "siguiente" de la aplicación iOS no irá al siguiente campo de texto (10)

Aquí hay una versión Swift 2.0 de Rob Mayoff

func textFieldShouldReturn(textField: UITextField) -> Bool { if textField == self.emailTextField { self.passwordTextField.becomeFirstResponder() }else{ self.passwordTextField.resignFirstResponder() } return false }

Tengo una escena simple (usando el guión gráfico en IB) con un cuadro de texto de Nombre de usuario y Contraseña. He configurado el teclado para que se cierre cuando está en el campo de texto Contraseña pero no puede obtener el siguiente botón (regresar) para trabajar en el Nombre de usuario y cambiar el foco (o Primer Respondedor) al cuadro de texto Contraseña.

Estoy cerrando el teclado mientras estoy en el campo de texto Contraseña de esta manera:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { if (theTextField == self.textPassword) { [theTextField resignFirstResponder]; } return YES; }

Sé que es algo similar a esto, pero simplemente no puedo atraparlo.


Debe agregar el UITextFieldDelegate en el archivo de encabezado. Entonces tienes que configurar

theTextField.delegate = self;

en el método viewDidLoad. Después de eso puedes continuar con

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { if (theTextField == self.textPassword) { [theTextField resignFirstResponder]; } else if (theTextField == self.textUsername) { [self.textPassword becomeFirstResponder]; } return YES; }


Esto es lo que pondrías:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { if (theTextField == self.textPassword) { [theTextField resignFirstResponder]; } else if (theTextField == self.usernameField) { [self.textPassword becomeFirstResponder]; } return YES; }



La tecla de retorno no hace nada especial en un campo de texto por defecto. Necesita cambiar explícitamente el primer respondedor:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { if (theTextField == self.textPassword) { [theTextField resignFirstResponder]; } else if (theTextField == self.textUsername) { [self.textPassword becomeFirstResponder]; } return YES; }


Puede usar esta subclase de UITextfield que cambia dinámicamente el UIReturnKey de acuerdo con la condición de texto / cadena, y luego realiza su acción de continuación en el campo textFieldShouldReturn: (UITextField *) delegado textField

if (textField.returnKeyType == UIReturnKeyNext) https://github.com/codeinteractiveapps/OBReturnKeyTextField


Tengo un problema para que el campo de texto de la contraseña se enfoque y luego pierda el foco inmediatamente. Por fin encontré que sería mejor devolver NO en la función textFieldShouldReturn :. Si devolvemos SÍ, el campo de texto recibirá una inserciónTexto: llamada. Entonces perderá el foco. No sé el motivo.

He creado una nueva pregunta para este problema: UITextField obtiene el foco y luego pierde el foco inmediatamente debido a que devuelve SÍ en textFieldShouldReturn

Si alguien conoce el motivo, házmelo saber. Gracias.

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { if (theTextField == self.textPassword) { [theTextField resignFirstResponder]; } else if (theTextField == self.textUsername) { [self.textPassword becomeFirstResponder]; } // we''d better return NO here return NO; }


Traté de usar la respuesta de Esteve, pero no funciona. Tal vez porque estoy usando archivos xib. Lo que hice fue cambiar su código para que funcione en mi código.

Funciona de la misma manera. Todo lo que necesita es asignar el valor del pedido como etiqueta y devolver la clave de acuerdo con Siguiente o Listo o Enviar en cada control de entrada.

- (BOOL)textFieldShouldReturn:(UITextField *)textField{ [textField resignFirstResponder]; if(textField.returnKeyType==UIReturnKeyNext) { UITextField *next = (UITextField *)[self.view viewWithTag:textField.tag+1]; [next becomeFirstResponder]; } else if (textField.returnKeyType==UIReturnKeySend) { //Do whatever you want with the last TextField } return YES; }


Uso este código que me permite controlar el comportamiento del formulario en el guión gráfico :

-(BOOL) textFieldShouldReturn:(UITextField *)textField{ if(textField.returnKeyType==UIReturnKeyNext) { UIView *next = [[textField superview] viewWithTag:textField.tag+1]; [next becomeFirstResponder]; } else if (textField.returnKeyType==UIReturnKeyDone) { [textField resignFirstResponder]; } return YES; }

Todo lo que necesita es asignar el valor del pedido como tag , y la returnkey acuerdo con Siguiente o Hecho en cada control de entrada.


para aquellos que quieran usar el lenguaje Swift:

class MyClass: UIViewController, UITextFieldDelegate { @IBOutlet weak var text1: UITextField! @IBOutlet weak var text2: UITextField! @IBOutlet weak var text3: UITextField! override func viewDidLoad() { super.viewDidLoad() text1.delegate = self text2.delegate = self text3.delegate = self } //.... func textFieldShouldReturn(textField: UITextField) -> Bool{ if textField == self.text1 { self.text2.becomeFirstResponder() }else if textField == self.text2{ self.text3.becomeFirstResponder() }else{ self.text1.becomeFirstResponder() } return true } //...

}

:-)