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;
}
Existen muchas soluciones a este problema. Consulte las respuestas publicadas en esta pregunta: Cómo navegar por los campos de texto (Botones Siguiente / Hecho) .
Lea más en la referencia de clase de UIResponder .
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
}
//...
}
:-)