UITextField Destino/Ação vs Métodos Delegados
-
12-12-2019 - |
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
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