UITableViewCell 中 UIButton 的 NSIndexPath

Posted

技术标签:

【中文标题】UITableViewCell 中 UIButton 的 NSIndexPath【英文标题】:NSIndexPath for UIButton in UITableViewCell 【发布时间】:2014-03-14 01:15:58 【问题描述】:

我正在尝试实现this link 中问题的答案中概述的块方法,但我不明白如何设置块。假设...

 cell.onButtonTapped = ^
        [self buttonSelectedAtIndexPath:indexPath];
    

是伪代码,假设我在该单元格中有一个 UITableViewCell(不是自定义单元格)和一个 UIButton,我将如何实际实现它。是否可以在不创建我自己的UITableViewCell 子类的情况下做到这一点?

【问题讨论】:

【参考方案1】:

如果你打算这样做,你真的必须创建一个 UITableViewCell 子类,它是其按钮的目标,具有块的属性并在点击按钮时调用块。

实际上有一种简单的方法可以知道单元格的子视图(例如此处的按钮)来自哪个 indexPath。首先,您需要 tableView 坐标上的一个点,该点包含在子视图中。假设您将选择子视图的中心。将其转换为 tableView 的坐标:

CGPoint subViewCenter = [self.tableView convertPoint:subview.center fromView:subView.superView]; // because a view's center is on its superview's coordinates

获取索引路径:

NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:subViewCenter];

【讨论】:

【参考方案2】:

不,根据您所指的答案,您需要一个自定义 UITableViewCell。本质上,您是在单元格上调用一个方法并传递该单元格的当前 indexPath。

无论您使用块方法还是委托方法,您都需要自定义 UITableViewCell,因为您需要在某个地方存储 indexPath 和设置它的方法。

【讨论】:

以上是关于UITableViewCell 中 UIButton 的 NSIndexPath的主要内容,如果未能解决你的问题,请参考以下文章

为啥我必须删除为 UITableViewCell 添加的子视图,而不是在 UITableViewCell 的子类中?

当 UITextField 获得焦点时,从 UITableViewCell 继承类中更改 UITableViewCell 的高度

浅析iOS开发中UITableViewCell的复用机制

UITableViewCell 事件中的 UIButton 不起作用

在单个 UITableViewCell 中管理多个 UITextField

更改 UITableViewCell 中 imageView 的位置