在tableView单元格中添加按钮

3

我希望在我的tableView cell中有三个按钮。我已经创建了一个自定义cell,所以我只需要在自定义cell中一次性地自定义按钮,而不是在cellForRowAtIndexPath里反复进行操作。

但我想要为所有三个按钮添加选择器,所以我使用了:

[cell.btn1 addTarget:self action:@selector(firstAction:) forControlEvents:UIControlEventTouchUpInside];

cellForRowAtIndexPath 中。这是最佳方式吗?每次滚动单元格时,不会重新初始化 addTarget 吗?这不会造成额外的负载吗?有没有更好的方法,我不知道呢?

编辑

这是我找出哪个单元格被按下的按钮所属的方法。

CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.feedTableView];
NSIndexPath *indexPath = [self.feedTableView indexPathForRowAtPoint:buttonPosition];
2个回答

1
你可以通过Storyboard或XIB文件设置按钮的目标和动作。更有趣的问题是,你需要找出被按下的按钮来自哪个表格单元格。
我建议你继承UIButton并在子类化的UIButton中添加一个“row”或“indexPath”属性,在你的表格提供“cellForRowAtIndexPath”方法中设置它。一旦按钮被按下并调用了你的操作,你就能从“sender”中提取出按钮被点击的行数。

Michael Dautermann,请查看我的编辑。当前逻辑在我使用Storyboard分配动作时无法工作。 - Jonathan
你目前的逻辑有什么问题?indexPath是虚假的或者? - Michael Dautermann
如果我在cellForRowAtIndexPath中执行选择器操作,它就可以工作,但是当我使用storyboards将操作直接连接到按钮,然后按下按钮时,什么也不会发生。 - Jonathan
如果您在操作上设置断点,当您通过Storyboard设置的按钮触发时,它们是否会触发?如果不是,则您可能没有正确连接该操作。 - Michael Dautermann
我猜这是因为在我的自定义单元格文件中,为了创建自定义单元格,我正在使用 initWithFrame 初始化按钮。 - Jonathan
你可以在Storyboard中创建自定义的TableView单元格。我刚刚链接的问题应该会告诉你如何操作。 - Michael Dautermann

0
你应该在自定义单元格中创建一个委托,并在任何按钮被点击时触发此委托。以下是一些代码示例:
@protocol CustomCellDelegate
-(void)cell:(UITableViewCell *)cell buttonTapped:(UIButton) atIndexPath:(NSIndexPath *)indexPath;
@end

@interface CustomCell
property (weak) id<CustomCellDelegate> delegate;
@end

@implementation CustomCell
-(void)buttonTapped {
  // fire delegate here
}
@end

我强烈建议您查看免费的Sensible TableView框架,因为它可以更轻松地处理带有按钮的自定义单元格。在过去的几个月中,我自己已经节省了大量时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接