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