引言:其实在手势解决问题,根据笔者经验,一般用好UITapGestureRecognizer 的cancelsTouchesInView属性,很多问题就能解决了。。
问题:在一个tableView的布局上,有点击tableView收回键盘操作,点击cell的事件,自定义cell可能有按钮的点击事件。。那么当这些问题都同时存在的时候,你想过怎么解决问题吗。。或者根据需求,设置不同的事件优先级。。
正文:
下面我们便来探讨一番,为了方面起见,我们给每个事件加个标识。
A:tableView收回键盘事件
B:按钮点击事件
C:自定义cell的点击事件
一:cancelsTouchesInView设置为YES,其实默认就是YES。有两种情况
1.我们点击了B事件,那么是B响应,A不响应 事件响应顺序 B>A
2.我们点击了C事件,C不响应,A会响应 事件响应顺序 A>C
总结:由此我们得出,cancelsTouchesInView设置为YES的时候,事件响应优先级B>A>C
(且事件冲突时候,只会响应一个)
二:cancelsTouchesInView设置为NO,也有两种情况
总结:由此我们得出,cancelsTouchesInView设置为NO的时候,
事件响应优先级,A > B (都会响应,只是A先响应,B后响应)
A > C (都会响应, A先响应,C后响应)
BC无可比性。。
(且事件冲突的时候,都会响应两个事件,所以设置为NO方法,能解决很多问题)
三:所以此种方法设置,在处理复杂的tableView的事件处理,有很好的解决办法。
四:之前demo丢了,总结还在。但是总是有朋友问我一些关于事件冲突的问题,然后我把问题一看,把这个cancelsTouchesInView设置为NO就行了,,于是就被直呼大神。。。以上问题是我一步步实践得到的总结。一步步看打印顺序的总结,所以绝对权威不会出错。。
五:学而不思则罔,当你遇到问题的时候,你有好好想过更深一步去探究为什么吗。 即使总结了,也可能会忘,但回头再看时,也能很快的解决问题。。这就是学习的方法。。
六:说到这里,你有多想吗。。那么我们的ABC三个事件,是可以做总结归类的。。
A:tableView收回键盘事件 统称为继承UIView的手势事件
B:按钮点击事件 统称为继承UIControl的控件,比如UITextField,UISwitch,等等
C:自定义cell的点击事件
结语:多想,多总结。。我的博客,希望能帮助他人,其实更好的是给自己的一份笔记。成为一名乐于分享,愿意分享,善于分享的人。从不怕自己的果实外露,因为露出一个我就会鞭策自己再学两个