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 IBAction
où sender=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. 🙂