如何从 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 单元格单击事件?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 怎么避免tableview刷新数据错乱

如何从 cellForRowAt 调用 draw(_ rect: CGRect) 在自定义 tableview 上绘图?

在 tableview 行中偏移 UIButton 框架

如何从自定义 UITableViewCell 调用操作以重新加载 tableView

如何在collectionView中调用tableView的didDeselectRowAt

如何在tableView中插入switch控件