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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top