Pergunta

Eu costumava usar o XCode para desenvolver meus aplicativos e usá-lo;Eu poderia criar um link no IB/Storyboard que sintetizasse esses métodos:

- (void)addTarget:(id)target action:(SEL)action forControlEvents: (UIControlEvents)controlEvents

Para quando

No entanto, não, estou fazendo tudo programaticamente (em rubymotion, embora não necessariamente relevante) e olhando a documentação do UITextField encontrei alguns métodos delegados, que implementei da seguinte forma:

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

Mas, usando isso, descobri que não conseguia percorrer os campos de entrada (dos quais tenho dois;email e senha) como pude antes com a abordagem addTarget.

Qual é a diferença entre essas duas abordagens?O primeiro implementa o último nos bastidores?Não entendo por que um me permite navegar e o outro não.Acabei de implementar os métodos delegados de maneira diferente da abordagem de objetivo/ação nos bastidores?

Feedback apreciado, Pachun

Foi útil?

Solução

Isso não tem nada a ver com meta/ação.Presumo que você queira dizer que no Interface Builder você arrastaria do UITextField para o File's Owner e selecione delegado no HUD.

Fazer o que foi dito acima teria o efeito de atribuir o delegado do textField, o que você precisaria fazer em um código como este

@email_field.delegate    = self
@password_field.delegate = self

o acima está assumindo que a classe que cria o UITextField's atuará como seu delegado.

Outras dicas

Não sei se há alguma diferença entre delegação e meta/ação neste caso, mas com delegação funciona assim:

- (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;
}

Cumprimentos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top