tableView didSelectRowAtIndexPat
2020-03-05 本文已影响0人
彧哥哥
image.png
didSelectRowAtIndexPath 当tableview里的 selection:选择在 no selection是无法正常的,选择成single selection,就可以正常了
一, 分析
可能有视图遮盖在了 cell 上, 如 cell 上添加 UIButton , 会优先响应 target 事件; 又如, UIButton 上覆盖一个同级的透明色视图。
(PS:可以搜索self.contentView addSubview注释掉所有添加在 cell 或 cell.contentView 上的所有视图, 查看结果)
(PS:通过在 UITableViewCell 类里打印 hitTest:withEvent: 发现返回的是 UITableViewCellContentView 视图)
(PS:设置成 YES 以后, hitTest:withEvent:返回了)
二, 总结
对于 cell 的跳转事件, 默认是有选中状态的, 若想取消选中状态, 可以设置 UITableViewCell 视图的 selectionStyle 属性为 UITableViewCellSelectionStyleNone, 而不是 UITableView 视图的 allowsSelection。
对于事件的不响应, 可以通过 ①层次结构图 ② hittest ③注释代码 等方式检查。
注释代码是一个快速排查问题的好方法, 可以在类的初始化处, 注释所有添加视图的方法。
reloadRowsAtIndexPaths: withRowAnimation:效率固然低下, 可以使用 cellForRowAtIndexPath: 方法, 查找到相应 cell, 调用其方法, 按需更新数据。