使用单元格按钮操作传递多个参数
注意 :我不需要任何关于使用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