3

我的自定义单元格中有一个 UIButton,我想在用户按下该按钮时触发一个动作,但我需要知道 UIButton 是从哪一行按下的。

这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    [self configureCell:cell atIndexPath:indexPath];
    return cell;

    ...

    [button addTarget:self action:@selector(buttonPressedAction:)forControlEvents:UIControlEventTouchUpInside];

}

- (void)buttonPressedAction:(UIButton *)button
{
    //int row = indexPath.row;
    //NSLog(@"ROW: %i",row);
}

如何将 indexPath 作为参数传递给我的选择器?

4

4 回答 4

6

您可以将按钮的 tag 属性设置为行号:

button.tag = indexPath.row;

并使用检索它

NSInteger row = button.tag;

或将索引路径对象本身设置为按钮的关联对象:

objc_setAssociatedObject(button, "IndexPath", indexPath);

NSIndexPath *ip = objc_getAssociatedObject(button, "IndexPath");
于 2012-09-06T10:03:07.693 回答
2

在自定义单元格上添加按钮时,您可以将tagUIButton 的属性添加为

UIButton *sampleButton = [[UIButton alloc] init];
sampleButton.tag = indexPath.row;

然后当你打电话时,你可以检查标签

- (void)buttonPressedAction:(UIButton*)sender
{
    if(sender.tag==0)
    {
      //perform action
    }
}

希望能帮助到你。快乐编码:)

于 2012-09-06T10:04:29.423 回答
1

简单设置按钮标签..

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    [self configureCell:cell atIndexPath:indexPath];
    return cell;

    ...

    [button setTag = indexPath.row]; // Set button tag

    [button addTarget:self action:@selector(buttonPressedAction:)
                                            forControlEvents:UIControlEventTouchUpInside];
    }

    - (void)buttonPressedAction:(id)sender
    {
        UIButton *button = (UIButton *)sender;
        int row = [button superview].tag;
    }
}
于 2012-09-06T10:06:32.857 回答
1

它甚至比设置标签还简单。试试这个..

要获取 indexPath,请尝试以下代码。

UIView *contentView = (UIVIew *)[button superview];
UITableViewCell *cell = (UITableViewCell *)[contentView superview];
NSIndexPath *indexPath = [self.tableview indexPathForCell:cell];

或者

NSIndexPath *indexPath = [self.tableview indexPathForCell:(UITableViewCell *)[(UIVIew *)[button superview] superview]];
于 2012-09-07T18:32:55.863 回答