如何通过UIButton标记获取UITableView的行和节?

时间:2013-07-12 05:50:19

标签: ios uitableview

UITableViewCell包含UIButton

在我的 cellForRowAtIndexPath

cell.toCartBtn.tag = indexPath.row;
[cell.toCartBtn addTarget:self
           action:@selector(toCart:) forControlEvents:UIControlEventTouchDown];

toCart 方法中,我需要通过点击按钮标记获取行和部分。我该怎么办?

5 个答案:

答案 0 :(得分:10)

请参阅此代码

- (void)toCart:(id)sender
{
    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
    if (indexPath)
    {
     ...
    }
}

答案 1 :(得分:2)

如果UIButton是单元格中的子视图

,请使用此简单代码
- (void)toCart:(id)sender 
{
UIButton *senderButton = (UIButton *)sender;
UITableViewCell *cell=(UITableViewCell*)senderButton.superView;
NSIndexPath *index = [tableView indexPathForCell:cell];
}

答案 2 :(得分:0)

创建一个自定义的UITableViewCell子类并处理那里的触摸。

然后为自定义表格视图单元格定义委托,并在创建单元格时,将表格视图数据源指定为委托。

当单元格处理触摸时,向委托发送消息,然后从表格视图中找到索引路径。

-(void)customTableViewCellButtonPressed:(CustomTableViewCell *)cell {
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
    ...
}

答案 3 :(得分:0)

试试这个:

- (void)toCart:(id)sender {
    CGPoint button1 = [sender convertPoint:CGPointZero toView:self.tblName];
    NSIndexPath *index = [self.tableView indexPathForRowAtPoint:button1];

    //use index variable
}

还可以查看有关您的错误的详细信息......

Detecting which UIButton was pressed in a UITableView

答案 4 :(得分:0)

对于Swift

    let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to: self.tableViewItems)
    let indexPath = self.tableViewItems.indexPathForRow(at: buttonPosition)
    if (indexPath != nil)
    {
        print(indexPath?.section)
        print(indexPath?.row)
    }