Edit. Trouvé une façon plus soignée!
Un argument que le bouton peut recevoir est - (id)sender
. Cela signifie que vous pouvez créer un nouveau bouton, héritant de UIButton, qui vous permet de stocker de l'autre arguments. Espérons que ces deux extraits illustrent quoi faire.
myOwnbutton.argOne = someValue
[myOwnbutton addTarget:self action:@selector(buttonTouchUpInside:) forControlEvents:UIControlEventTouchUpInside];
et
- (IBAction) buttonTouchUpInside:(id)sender {
MyOwnButton *buttonClicked = (MyOwnButton *)sender;
//do as you please with buttonClicked.argOne
}
-------------------------------
C'était ma proposition initiale.
Il y a un moyen d'obtenir le même résultat, mais ce n'est pas assez. Supposons que vous vouliez ajouter un paramètre à la navigate
méthode. Le code ci-dessous ne vous permettra pas de passer ce paramètre à l' navigate
.
[button addTarget:self action:@selector(navigate) forControlEvents:UIControlEventTouchUpInside];
Pour contourner ce problème, vous pouvez déplacer la naviguer method
d'une classe en soi et l'option "paramètres" en tant qu'attributs de la classe...
NavigationAid *navAid = [[NavigationAid alloc] init];
navAid.firstParam = someVariableOne
navAid.secondParam = someVariableTwo
[button addTarget:navAid action:@selector(navigate) forControlEvents:UIControlEventTouchUpInside];
Bien sûr, vous pouvez garder la méthode de naviguer dans la classe d'origine et de l'avoir appelé, par l'aide à la navigation, aussi longtemps que il sait où le trouver.
NavigationAid *navAid = [[NavigationAid alloc] init];
navAid.whereToCallNavigate = self
navAid.firstParam = someVariableOne
navAid.secondParam = someVariableTwo
[button addTarget:navAid action:@selector(navigate) forControlEvents:UIControlEventTouchUpInside];
Comme je l'ai dit, c'est pas joli, mais il a travaillé pour moi et je n'ai pas trouvé quelqu'un qui suggère toute autre solution de travail.