UITextField Cible/Action vs Délégué Méthodes
-
12-12-2019 - |
Question
J'ai l'habitude d'utiliser XCode le fait de développer mes applications et l'utilisation;J'ai pu créer un lien dans l'IB/Storyboard qui a fait la synthèse de cette méthodes:
- (void)addTarget:(id)target action:(SEL)action forControlEvents: (UIControlEvents)controlEvents
pour quand
Cependant, non, je fais tout par programme (en rubymotion, mais pas nécessairement pertinentes) et la recherche dans la documentation de UITextField j'ai trouvé quelques délégué méthodes, j'ai mis en œuvre comme suit:
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
Mais en utilisant cela, j'ai trouvé que je ne pouvais pas l'onglet à travers les champs de saisie (j'en ai deux;e-mail et mot de passe) que j'ai pu avant avec la addTarget approche.
Quelle est la différence entre ces deux approches?L'ex-mettre en œuvre le second derrière les coulisses?Je ne comprends pas pourquoi on me permettra d'onglet et d'autres ne le seront pas.Ai-je simplement mettre en œuvre le délégué des méthodes différemment que la cible de l'action approche n'derrière les coulisses?
Commentaires appréciés, pachun
La solution
Cela n'a rien à voir avec objectif/action.Je suppose que tu veux dire dans Interface Builder vous faites glisser à partir de la UITextField
à l' File's Owner
et sélectionnez délégué de la PALETTE.
Faire ci-dessus aurait pour effet d'attribuer la textField du délégué qui vous aurait besoin de le faire dans le code comme ceci
@email_field.delegate = self
@password_field.delegate = self
le dessus est en supposant que la classe qui crée l' UITextField
s 'agira à titre de délégué.
Autres conseils
Je ne sais pas s'il y a une différence entre la délégation et la cible / action dans ce cas, mais avec la délégation de cette façon fonctionne:
- (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;
}
Cordialement