Métodos de destino/acción de UITextField frente a métodos de delegado
-
12-12-2019 - |
Pregunta
Solía usar XCode para desarrollar mis aplicaciones y usarlo;Podría crear un enlace en IB/Storyboard que sintetizara estos métodos:
- (void)addTarget:(id)target action:(SEL)action forControlEvents: (UIControlEvents)controlEvents
para cuando
Sin embargo, no, lo estoy haciendo todo mediante programación (en rubymotion, aunque no necesariamente relevante) y al buscar en la documentación de UITextField encontré algunos métodos delegados, que implementé de la siguiente manera:
def textFieldShouldReturn(text_field)
text_field.resignFirstResponder
end
def textFieldShouldEndEditing(text_field)
# this is for validations; don't set a first responder here
true
end
def textFieldDidEndEditing(text_field)
text_field == @email_field ? @password_field.becomeFirstResponder : delegate.validate_login_info
end
Pero al usar esto, descubrí que no podía pasar por los campos de entrada (de los cuales tengo dos;correo electrónico y contraseña) como pude antes con el enfoque addTarget.
¿Cuál es la diferencia entre estos dos enfoques?¿El primero implementa el segundo detrás de escena?No entiendo por qué uno me permite pasar y el otro no.¿Acabo de implementar los métodos de delegado de manera diferente a como lo hace el enfoque de objetivo/acción detrás de escena?
Comentarios apreciados, Pachun
Solución
Esto no tiene nada que ver con el objetivo/acción.Supongo que te refieres a Interface Builder que arrastrarías desde el UITextField
hacia File's Owner
y seleccione delegado del HUD.
Hacer lo anterior tendría el efecto de asignar el delegado del campo de texto, lo cual necesitarías hacer en un código como este.
@email_field.delegate = self
@password_field.delegate = self
lo anterior supone que la clase que crea el UITextField
's actuará como su delegado.
Otros consejos
No sé si hay alguna diferencia entre la delegación y el objetivo / acción en este caso, pero con la delegación de esta manera funciona:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
if (textField == self.firstTextField)
{
[self.secondTextField becomeFirstResponder];
}
else if (textField == self.secondTextField)
{
[textField resignFirstResponder];
// proceed with login
}
return YES;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
// Validation
return YES;
}
Saludos