如何将TableView点击位置转换为对应Cell View的本地位置?
解决TableView点击坐标转Cell本地坐标的问题
这个问题其实UIKit早就给咱们准备好了便捷的解决方案,用视图自带的坐标转换方法就能轻松搞定,完全不用自己手动计算偏移量或者滚动距离~
具体步骤和代码示例
假设你已经在点击回调里拿到了目标Cell,只需要两步就能完成坐标转换:
- 获取点击位置在TableView中的坐标
- 用Cell的
convert(_:from:)方法把这个坐标转换成Cell的本地坐标
完整的回调代码可以写成这样:
@objc func handleTableViewTap(_ tapGesture: UITapGestureRecognizer) { guard let tableView = tapGesture.view as? UITableView else { return } // 获取相对于TableView的点击位置 let tapLocationInTableView = tapGesture.location(in: tableView) // 你已经实现的获取点击Cell的逻辑 guard let indexPath = tableView.indexPathForRow(at: tapLocationInTableView), let targetCell = tableView.cellForRow(at: indexPath) as? YourCustomCellSubclass else { return } // 核心:把TableView坐标转换为Cell本地坐标 let tapLocationInCell = targetCell.convert(tapLocationInTableView, from: tableView) // 判断是否点击到Cell上的Label if targetCell.yourLabelOutlet.frame.contains(tapLocationInCell) { // 这里写点击Label后的处理逻辑 print("成功点击到Cell上的Label啦!") } }
为什么这个方法靠谱?
UIView的convert(_:from:)方法会自动帮你处理所有复杂情况:
- TableView的滚动偏移量
- Cell在TableView中的位置
- Cell内部的布局边距、自动布局约束带来的位置变化
完全不用你手动去计算这些变量,直接调用就能拿到准确的本地坐标。
内容的提问来源于stack exchange,提问作者Mario
相关产品推荐
相关产品推荐

