美文网首页
tableView:didSelectRowAtIndexPat

tableView:didSelectRowAtIndexPat

作者: 活最好的自己 | 来源:发表于2018-11-01 14:58 被阅读66次

一, 分析

  1. 可能有视图遮盖在了 cell 上, 如 cell 上添加 UIButton , 会优先响应 target 事件; 又如, UIButton 上覆盖一个同级的透明色视图。

(PS:可以搜索self.contentView addSubview注释掉所有添加在 cell 或 cell.contentView 上的所有视图, 查看结果)

  1. 让 cell.contentView 视图的 userInteractionEnabled 设置为 NO 。

(PS:通过在 UITableViewCell 类里打印 hitTest:withEvent: 发现返回的是 UITableViewCellContentView 视图)

  1. UITableView视图的 allowsSelection 属性设置成了NO.

(PS:设置成 YES 以后, hitTest:withEvent:返回了)

二, 总结

  1. 对于 cell 的跳转事件, 默认是有选中状态的, 若想取消选中状态, 可以设置 UITableViewCell 视图的 selectionStyle 属性为 UITableViewCellSelectionStyleNone, 而不是 UITableView 视图的 allowsSelection。
  2. 对于事件的不响应, 可以通过 ①层次结构图 ② hittest ③注释代码 等方式检查。
  3. 注释代码是一个快速排查问题的好方法, 可以在类的初始化处, 注释所有添加视图的方法。
  4. reloadRowsAtIndexPaths: withRowAnimation:效率固然低下, 可以使用 cellForRowAtIndexPath: 方法, 查找到相应 cell, 调用其方法, 按需更新数据。

相关文章

网友评论

      本文标题:tableView:didSelectRowAtIndexPat

      本文链接:https://www.haomeiwen.com/subject/eccxxqtx.html