1

我创建了一个填充了自定义 UITableViewCell 的表格视图(像这样)。每个单元格包含两个 UIButton。我将操作分配给按钮,如下所示:

 [decreaseButton addTarget:self action:@selector(decrease) forControlEvents:UIControlEventTouchUpInside];

这是正确的方法吗?无论如何,它可以工作,但是在我的“减少”方法中,我需要知道在我的 18 个表格视图行中的哪一行中按下了按钮。indexPath.row 当然不能在 cellForRowAtIndexPath 方法之外工作。有人可以解释我该怎么做吗?

提前非常感谢!

亚辛

4

2 回答 2

3

您可以通过两种方式做到这一点。

检查事件发送者

更改您的减少方法:

- (void)decrease;

到:

- (void)decrease:(id)sender;

这样,当调用减少时,您将获得对内部事件进行触摸的按钮的引用。

定义更接近信息的减少方法

另一种解决方案是为每个按钮设置不同的目标实例(例如,将 reduce 函数实现为自定义单元格的一部分)。这样你就知道被触摸的按钮是当前单元格的按钮。

于 2009-11-10T19:23:03.680 回答
1

我解决这个问题的方法是跟踪我的自定义单元格对象中可能需要的数据。并且按钮不是连接到外部接收器,而是连接到它自己的单元,它又知道如何调用动作的真正接收器。

我用类似的东西制作我的细胞:

cell = [[MyTableViewCell alloc] initWithStyle:style 
                              reuseIdentifier:CellIdentifier];

我有一个设置方法,所以我可以在出列时重新初始化一个单元格:

[cell setupMyCellWithContext:objectID 
                      target:[[UIApplication sharedApplication] delegate] 
                      action:@selector(someAction)];

因此,在您的单元类中,您使用在 setup 方法中发送的操作和目标来调用真正的目标:

- (void)doAction:(id)sender {
    if ([target respondsToSelector:action]) {
        [target performSelector:action withObject:objectID afterDelay:0];
    }
}

因此,当您的用户点击按钮时,操作系统会调用 [cell doAction:],它会使用正确的上下文对象调用您之前设置的目标和操作选择器。

于 2009-11-11T01:57:38.470 回答