2009-10-30 4 views
0

Je souhaite transmettre une variable à la méthode buttonEvent dans le sélecteur.iPhone: passez une valeur à une méthode appelée via @selector()

[bouton addTarget: action de messageTableViewController: @selector (buttonEvent) forControlEvents: UIControlEventTouchUpInside];

Comment fait-on cela, disons si la variable est uid? La signature de la méthode est - (void) buttonEvent: (NString *) uid;

Répondre

0

Tout d'abord, vous devez inclure les deux points dans l'appel @selector:

[button addTarget: messageTableViewController action: @selector(buttonEvent:) forControlEvents: UIControlEventTouchUpInside];

Deuxièmement, vous ne pouvez pas faire exactement ce que vous voulez. L'argument passé à buttonEvent: sera toujours le contrôle réel qui a été touché. Vous pouvez utiliser ce contrôle pour déterminer ce qu'il faut faire ensuite (c'est-à-dire soit l'utiliser directement, soit définir sa balise et l'utiliser).

+0

En fait, le signe deux-points n'est requis que si vous voulez passer l'expéditeur. Le mécanisme d'action-cible pour les contrôles prend en charge trois formes de sélecteur d'action différentes (aucun paramètre, l'expéditeur ou l'expéditeur et l'événement). Voir http://www.devworld.apple.com/iphone/library/documentation/UIKit/Reference/UIControl_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006779-RH2-SW28 – gerry3

-1

Le mécanisme target-action enverra l'expéditeur de l'action à l'argument du sélecteur, dans votre cas, le bouton sur lequel vous avez appuyé. Je ne pense pas qu'il y ait moyen de contourner cela.

Vous voudrez probablement associer votre uid avec le bouton (dans un NSDictionary, par exemple), et chercher dans la méthode d'action, par exemple:

- (void)buttonEvent:(id)sender 
{ 
    NSDictionary *dict = self.buttonToUidDict; 
    NSString *uid = [dict valueForKey:sender]; 
} 
+1

Je crois comprendre qu'un L'objet doit implémenter copyWithZone: (sa classe doit être conforme au protocole NSCopying) à utiliser comme clé dans un dictionnaire (et pas UIButton). – gerry3

1
  1. tous les magasins de vos boutons dans un tableau.

  2. Stockez les arguments que vous souhaitez transmettre dans un autre tableau.

  3. Utilisez le - (IBAction) MonAction: (id) expéditeur, et recherchez votre bouton dans le tableau de bouton (IndexOfObject)

  4. Utilisez cet index pour rechercher la valeur que vous voulez à partir de votre tableau de uid cordes et procéder.

Une alternative consiste à définir la valeur entière .tag pour chaque UIButton comme un index, à nouveau dans ce tableau d'uids.

+0

Si la cellule est personnalisée, la meilleure approche consiste à définir l'index de ligne actuel dans une propriété de la cellule: http://stackoverflow.com/questions/1639361/uibutton-inside-uitableviewcontroller/1639641#1639641 – gerry3

+1

Qui a dit quelque chose à propos de cellules? –

+0

La question implique que le bouton est sur une cellule de vue de table. – gerry3

Questions connexes