Swift 4中UITableView的didSelectRowAt方法无法触发求助
解决UITableView didSelectRowAt方法无法触发的问题
我仔细看了你的代码,发现最直接导致didSelectRowAt不触发的原因,以及几个额外的排查点,一步步来解决:
1. 修复willSelectRowAt方法(核心问题)
你实现了tableView(_:willSelectRowAt:)方法,但返回了nil。这个方法的作用是告知系统是否允许选中该行,返回nil就等于直接禁止了选中操作,didSelectRowAt自然不会被调用。
解决方式二选一:
- 直接删除这个方法(如果你不需要在选中前做额外逻辑);
- 修改方法返回传入的
indexPath,允许选中:
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? { print("works?") return indexPath // 允许选中该行 }
2. 额外的排查验证步骤
如果修改后还是没效果,检查以下几点:
- 确认tableView的
allowsSelection属性为true:
在viewDidLoad里显式设置,避免Storyboard配置出错:self.actionsTable.allowsSelection = true self.researchTable.allowsSelection = true - 检查cell的交互是否启用:
确保cell的userInteractionEnabled是true(默认是true,除非你手动修改过); - 避免scrollView拦截触摸事件:
因为你的tableView嵌套在scrollView里,设置scrollView的delaysContentTouches为true,让tableView先响应触摸:scrollView.delaysContentTouches = true
先解决第一个核心问题,基本就能让didSelectRowAt正常触发了。
内容的提问来源于stack exchange,提问作者Joshua Noble
相关产品推荐
相关产品推荐

