我在单元格内容视图中创建了按钮。我想检测单击按钮的行。
答案 0 :(得分:5)
您需要让UIViewController
通过创建UIButton
到UIViewController
的目标操作来接收活动,如下所示:
[button addTarget:self action:@selector(cellButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
然后在UIViewController
的操作方法中,您可以使用UITableView
s indexPathForCell:
方法获取正确的NSIndexPath
:
- (void) cellButtonClicked: (id) sender {
UIButton *btn = (UIButton *) sender;
UITableViewCell *cell = (UITableViewCell *) [[btn superview] superview];
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
//do something with indexPath...
}
答案 1 :(得分:2)
当apple更改视图层次结构时,这是一个不会忽略的替代方法。基本上在表视图的坐标系中找到按钮的原点。知道后,您可以找到NSIndexPath
所在行的point
。
- (void)buttonTapped:(UIButton *)button
{
CGPoint buttonOrigin = [button convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonOrigin];
}
答案 2 :(得分:0)
同意 Will ,你必须在iOs7中进行迭代
for (UIView *parent = [btn superview]; parent != nil; parent = [parent superview]) {
if ([parent isKindOfClass: [UITableViewCell class]]) {
UITableViewCell *cell = (UITableViewCell *) parent;
NSIndexPath *indexPath = [self.tableView indexPathForCell: cell];
break;
}
}
答案 3 :(得分:0)
您可以通过更简单的解决方案实现这一目标。
由于在大多数情况下,每个单元格代表一个数组内的对象,您需要在自定义单元格类中定义一个属性,该属性表示单元格ID(在您的数组中)或服务器数据库中定义的单元格ID当点击按钮时,您可以通过self.id
轻松获取它 - id表示单元格ID属性。