使用ReverseExtension框架时UITableView行无法选中的问题
导致
didSelectRowAt IndexPath不触发的常见原因及排查方法 1. 附件视图拦截了点击事件
带附件的消息行里,像UIImageView、自定义附件容器这类视图,如果开启了userInteractionEnabled = true,又没处理好事件传递逻辑,就会把点击事件截下来,导致cell收不到点击信号,自然不会触发didSelectRowAt。
排查方向:
- 检查附件相关视图的
userInteractionEnabled属性,若非必须开启则直接关闭;如果必须保留交互,要确保这些视图的点击逻辑不会阻断事件向cell传递。 - 若使用了自定义附件视图,检查是否重写了
hitTest(_:with:)方法,有没有错误的事件拦截逻辑。
2. Cell或TableView的交互开关未开启
- 如果cell的
userInteractionEnabled被设为false,点击事件根本无法触发;要是tableView的allowsSelection为false,所有cell的点击都不会触发回调。 - 另外cell的
selectionStyle设为.none虽不影响事件触发,但自定义cell时若误关了交互,也会导致问题。
排查方向:
- 确认tableView的
allowsSelection属性值为true; - 检查cell的
userInteractionEnabled是否处于开启状态。
3. ReverseExtension框架的特殊处理影响
ReverseExtension用于实现反向滚动加载,可能对tableView的布局、cell交互做了特殊处理,比如修改了contentInset、scrollIndicatorInsets,或是存在事件拦截逻辑,导致点击事件无法正常传递到回调方法。
排查方向:
- 暂时移除ReverseExtension,用原生方式实现底部加载逻辑,测试
didSelectRowAt是否能正常触发,以此确认是否为框架导致的问题; - 查看ReverseExtension的源码或说明文档,排查是否存在影响cell点击的配置项。
4. Cell视图层级存在问题
如果cell的contentView上覆盖了透明视图,或是某个子视图超出cell范围且开启了交互,都会拦截点击事件。
排查方向:
- 用Xcode的Debug View Hierarchy工具查看cell的视图层级,确认是否有视图覆盖在可点击区域上;
- 检查contentView的子视图是否超出cell的bounds,且没有不必要的交互开启。
内容的提问来源于stack exchange,提问作者D.l.Prasad
相关产品推荐
相关产品推荐

