使用单元格按钮操作传递多个参数

注意 :我不需要任何关于使用UITableview的didselect委托发送数据的建议

myButton.h

#import  @interface myButton : UIButton { id userData; } @property (strong,nonatomic) NSString* data1; @end 

myButton.m

 #import "myButton.h" @implementation myButton /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */ @end 

我的testCollectionViewCell.h的自定义单元格

 #import "myButton.h" @interface testCollectionViewCell : UICollectionViewCell @property (nonatomic,weak) IBOutlet myButton *serviceFav; 

我的testCollectionViewCell.m的自定义单元格

 #import "testCollectionViewCell.h" #import  @implementation testCollectionViewCell @synthesize serviceFav; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code //self.serviceFav=[myButton buttonWithType:UIButtonTypeCustom]; } return self; } // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { } @end 

这是我的集合视图委托的代码

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { testCollectionViewCell *cell = [testCollectionViewCell dequeueReusableCellWithReuseIdentifier:@"testCollectionViewCell" forIndexPath:indexPath]; cellData = [self.collectionData objectAtIndex:[indexPath row]]; cell.serviceFav.data1 = @"data1"; **//shows error here and kills** [cell.serviceFav addTarget:self action:@selector(touchUpHandler:) forControlEvents:UIControlEventTouchUpInside]; return cell; } 

// ——这不是来的 – 我想打电话给他

 -(void)touchUpHandler:(myButton*)sender { UIButton *button = (myButton *)sender; //instance of UIButton NSLog(@"Data 1 = %@",sender.data1); } 

我刚刚使用与问题中相同的过程制作了一个样本并且它有效。

链接: https : //www.dropbox.com/s/lb2k7nzsytxjnl2/tabletest.zip?dl = 0

拿了一个自定义Button类

MyButton.h

 #import  @interface MyButton : UIButton @property (strong,nonatomic) NSString* data1; @property (strong,nonatomic) NSString* data2; @end 

MyButton.m

 #import "MyButton.h" @implementation MyButton @end 

为您的CustomCell类创建一个IBOutlet

CustomTableViewCell.h

 #import  #import "MyButton.h" @interface CustomTableViewCell : UITableViewCell @property (weak, nonatomic) IBOutlet MyButton *btnLike; @end 

ViewController.m

 #import "ViewController.h" #import "CustomTableViewCell.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 5; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { CustomTableViewCell* cell = (CustomTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"CustomTableViewCell"]; cell.btnLike.data1 = @"data1"; cell.btnLike.data2 = @"data2"; [cell.btnLike addTarget:self action:@selector(touchUpHandler:) forControlEvents:UIControlEventTouchUpInside]; return cell; } - (void) touchUpHandler:(MyButton *)sender { NSLog(@"Data 1 = %@",sender.data1); NSLog(@"Data 2 = %@",sender.data2); } @end 

单击单元格中的按钮,它将转到选择器方法touchUpHandler并在控制台上打印

 2016-10-12 23:14:39.034 tabletest[28414:671128] Data 1 = data1 2016-10-12 23:14:39.035 tabletest[28414:671128] Data 2 = data2