如何从 tableview 框架中调用 tableview 单元格单击事件?
Posted
技术标签:
【中文标题】如何从 tableview 框架中调用 tableview 单元格单击事件?【英文标题】:How can I Invoke tableview cell click event out of tableview frame? 【发布时间】:2019-03-21 15:52:22 【问题描述】:有没有办法当我触摸到tableview框架之外的点时,调用tableview委托函数-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
?
我已经尝试覆盖 tableview 的 -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
的 superview 并更改点并让事件继续传递给 tableview 和 tableview 的子视图。只需滚动事件工作但单击事件。
这是一个演示 project
【问题讨论】:
【参考方案1】:问题在于 UITableView 不能让所有单元格保持活动状态。细胞可重复使用。可见区域之前和之后的几个单元格放置在视图上。 尝试直接调用委托方法。
tableView.delegate?.tableView?(tableView, didSelectRowAt: indexPath)
如果您只想为表格视图中当前可用的单元格调用此方法。
if let _ = tableView.cellForRow(at: indexPath)
tableView.delegate?.tableView?(tableView, didSelectRowAt: indexPath)
您可以轻松地将屏幕位置转换为单元格的索引。
【讨论】:
这是一个很好的解决方案,但我认为它不是最好的。它超出了 tableview 的控制。还有其他方法吗? 你应该明白并不是所有的单元格都放在桌子上。只有可见和一些前后可见区域。所以你只能点击这些单元格。对于剩余的单元格,只有这种方式是可能的。以上是关于如何从 tableview 框架中调用 tableview 单元格单击事件?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 cellForRowAt 调用 draw(_ rect: CGRect) 在自定义 tableview 上绘图?
如何从自定义 UITableViewCell 调用操作以重新加载 tableView