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?

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top