iOS – passer des arguments en action: @selector ()

J'ajoute un button à UITableViewCell par programme. La méthode à exécuter lorsque le button est enfoncé est - (void) quantityDown:(id)sender rowNumber:(int)rowNum , où rowNum est la ligne dans laquelle le button apparaît.

Lors de l'ajout de la cible au button, Xcode complète automatiquement les éléments suivants:

 [buttonDown addTarget:self action:@selector(quantityDown:rowNumber:) forControlEvents:UIControlEventTouchUpInside]; 

Mais peu importe ce que j'essaie, je ne peux pas passer le numéro de ligne dans la méthode. Je supposais que la partie pertinente du code ressemblerait

 action:@selector(quantityDown:rowNumber:indexPath.row) 

mais ça ne fait pas l'affaire. J'ai vu d'autres choses comme

 action:@selector(quantityDown:)rowNumber:indexPath.row 

et

 action:@selector(quantityDown:rowNumber:)withObject:@"first" withObject:@"Second" 

Mais aucun travail. Je n'ai pas besoin de passer un premier argument, juste le numéro de ligne. J'ai également essayé de définir la méthode comme - (void) quantityDown:(int)rowNum puis d'écrire le sélecteur comme:

 action:@selector(quantityDown:indexPath.row) 

mais cela ne fonctionne pas non plus.

Pensées?

Merci d'avance.

Pourquoi ne faites-vous pas une Custom UIButton class et avez l'object en tant que propriété?

Voir ci-dessous.

"MyButton.h"

 @interface MyButton : UIButton @property(nonatomic, strong)MyClass *obj; @end 

"MyButton.m"

 #import "MyButton.h" @implementation MyButton - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code } return self; } @end 

MyButton class maintenant la MyButton class à votre button actuel dans la cellule / ou initialisez le button personnalisé au lieu de la UIButton class normale et affectez directement l'object.

Et dans votre IBActionsender=MyButton

 - (void) quantityDown:(id)sender{ MyButton *btn = (MyButton *)sender; //You get the object directly btn.obj; } 

De cette façon, vous pouvez accéder à autant de propriétés que vous voulez facilement. Et c'est utile dans d'autres implémentations aussi.

J'espère que cela aide.

Le button ne peut contenir qu'une seule input, gardez donc votre expéditeur et votre rowNum identiques pour qu'il puisse être manipulé facilement. Dans la cellule pour la méthode de ligne.

 UIButton *b = [UIButton buttonWithType:UIButtonTypeContactAdd]; b.tag = indexPath.row; [b addTarget:self action:@selector(quantityDown:) forControlEvents:UIControlEventTouchUpInside]; 

Votre méthode

  - (void)quantityDown:(id)sender { NSLog(@"%d", sender.tag); } 

J'espère que cela aidera …

Définissez chaque balise de button comme indexPath.row . Ensuite, déclarez simplement la fonction:

 - (void)quantityDown:(id)sender 

Dans cette méthode, faites ceci:

 UIButton *btn = (UIButton *)sender; 

Ajouter une cible comme ceci:

 [buttonDown addTarget:self action:@selector(quantityDown:) forControlEvents:UIControlEventTouchUpInside]; 

De btn.tag vous pouvez get le numéro de ligne. J'espère que cela t'aides. 🙂