UitextField Target / Action VS Delega Methods
-
12-12-2019 - |
Domanda
Ho usato per usare Xcode, sviluppare le mie app e usando ciò;Potrei creare un collegamento in IB / Storyboard che sintetizzò questo metodo:
- (void)addTarget:(id)target action:(SEL)action forControlEvents: (UIControlEvents)controlEvents
.
per quando
Tuttavia, no, lo sto facendo tutto programmaticamente (in Rubymotion, anche se non necessariamente rilevante) e guardando nella documentazione per UitextField ho trovato alcuni metodi delegati, che ho implementato come segue:
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
.
Ma usare questo, ho scoperto che non potevo scegliere i campi di input (di cui ho due; e-mail e password) come potevo prima con l'approccio aggiuntivo.
Qual è la differenza tra questi due approcci?L'ex implementa il secondo dietro le quinte?Non capisco perché uno mi permetterà di tabbiare e l'altro non lo farà.Ho appena implementato i metodi delegati in modo diverso rispetto all'approccio target / azione dietro le quinte?
Feedback apprezzato, Pachun
Soluzione
Questo non ha nulla a che fare con il bersaglio / l'azione.Assumendo che tu intenda nel costruttore di interfaccia si trascinerà dal UITextField
al File's Owner
e selezionare Delegato dall'HUD.
Fare di quanto sopra avrebbe l'effetto di assegnare il delegato del campo di testo che dovresti fare in codice come questo
@email_field.delegate = self
@password_field.delegate = self
.
Quanto sopra sta assumendo che la classe che crea la UITextField
fungerà come il loro delegato.
Altri suggerimenti
Non so se c'è alcuna differenza tra la delegazione e l'obiettivo / azione in questo caso, ma con la delegazione in questo modo funziona:
- (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;
}
.
Saluti