所以我想在tableView单元格中使用三个按钮。我已经制作了一个自定义单元格,因此我自定义了一次自定义单元格中的按钮,而不是在cellForRowAtIndexPath
中一次又一次地执行此操作
但我想为所有三个按钮添加一个选择器,我正在使用
[cell.btn1 addTarget:self action:@selector(firstAction:) forControlEvents:UIControlEventTouchUpInside];
在cellForRowAtIndexPath
内。这是最好的方式吗?每次滚动我的单元格时,不会addTarget初始化并重新初始化自己?这不是一个额外的超负荷?有没有更好的方法做到这一点,我不知道?
这就是我弄清楚按钮属于哪个单元格的方式
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.feedTableView];
NSIndexPath *indexPath = [self.feedTableView indexPathForRowAtPoint:buttonPosition];
答案 0 :(得分:1)
您可以通过故事板或XIB文件设置按钮的目标和操作。更有趣的问题是你可以找出按下按钮的哪个表格单元格。
我建议对UIButton进行子类化,并为您的子类UIButton添加“row
”或“indexPath
”属性,您可以在表格中设置“cellForRowAtIndexPath
”方法,并从中(“sender
”)按下按钮后,您可以提取单击按钮的行,并调用您的操作。
答案 1 :(得分:0)
您可能应该在自定义单元格中创建一个委托,并在单击任何按钮时触发此委托。一些代码示例:
@protocol CustomCellDelegate
-(void)cell:(UITableViewCell *)cell buttonTapped:(UIButton) atIndexPath:(NSIndexPath *)indexPath;
@end
@interface CustomCell
property (weak) id<CustomCellDelegate> delegate;
@end
@implementation CustomCell
-(void)buttonTapped {
// fire delegate here
}
@end
我还强烈建议您查看免费的Sensible TableView框架,因为它可以更轻松地处理这些带按钮的自定义单元格。在过去的几个月里,我自己用它节省了很多时间。