Quelle est la meilleure façon d'appeler un IBAction de avec dans le code?
-
04-10-2019 - |
Question
Dites par exemple j'ai un IBAction qui est relié à un UIButton dans le constructeur d'interface.
- (IBAction)functionToBeCalled:(id)sender
{
// do something here
}
Avec dans mon code, disons par exemple dans une autre méthode, quelle est la meilleure façon d'appeler IBAction ?
Si je tente de l'appeler comme ça, je reçois une erreur:
[self functionToBeCalled:];
Mais, si je tente de l'appeler comme ça (tricher un peu, je pense), il fonctionne très bien:
[self functionToBeCalled:0];
Quelle est la bonne façon de l'appeler correctement?
La solution
La bonne façon est soit:
- [self functionToBeCalled:nil]
Pour passer un émetteur nul, ce qui indique qu'il n'a pas été appelé par le cadre habituel.
ou
- [self functionToBeCalled:self]
Pour vous passer comme l'expéditeur, ce qui est correct.
Lequel choisir dépend exactement ce que fait la fonction, et ce qu'il attend l'expéditeur soit.
Autres conseils
sémantiquement parlant, appelant une IBAction
devrait être déclenchée par des événements UI seulement (par exemple un bouton de prise). Si vous devez exécuter le même code à partir de plusieurs endroits, vous pouvez extraire ce code de la IBAction
dans une méthode spécifique et appeler cette méthode des deux lieux:
- (IBAction)onButtonTap:(id)sender {
[self doSomething];
}
Cela vous permet de faire la logique supplémentaire en fonction de l'expéditeur (vous pourriez peut-être attribuer la même action à plusieurs boutons et décider quoi faire en fonction du paramètre de sender
). Et réduit également la quantité de code que vous devez écrire dans le IBAction
(qui maintient votre mise en œuvre du contrôleur propre).