在iPhone的那个单元格中点击一个按钮,检测单元格行值?

时间:2010-12-28 06:17:49

标签: iphone objective-c cocoa-touch ios uitableview

我在单元格内容视图中创建了按钮。我想检测单击按钮的行。

4 个答案:

答案 0 :(得分:5)

您需要让UIViewController通过创建UIButtonUIViewController的目标操作来接收活动,如下所示:

[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属性。