昨天群里一个朋友问想实现:长按一个cell,把这个cell从tableviewA,移动到tableviewB中.在移动过程中,要有一个view显示,模拟这个cell.
他说他卡在了touch事件这块.我帮他写了个小demo.
先说说我在写的过程中遇到的问题:
1.scrollview的事件拦截
在写的过程中,我被scrollview整的很崩溃.由于scrollview要判断,touch事件是scroll动作,还是点击事件.
一直想弄明白scrollview是怎么拦截touch事件的..在我的知识面中,ios是有event链的..它怎么搞到respondFirst的..到现在也没明白..
在event链中,touch事件是从最上层view开始的..它怎么能拦截cell的事件.
2.nextResponded的touch事件和super的touch事件的区别
touch事件,可以handle,也可以传递.
主要说传递,至于handle,其实就是不传递么.
[self.nextResponder touchesEnded:touches withEvent:event];
这个调用,就是把event事件传递给event链上,self的下一个object响应该event.
这个和windows中的事件链原理一样的..在windows中,可以挂钩子..让其排在事件链的最后一位.目的是为了第一个响应特定事件.
[super touchesEnded:touches withEvent:event];
是给他让其父类响应touch事件.至于是handle了.还是传递.这就看父类怎么实现了.
3.那个模拟cell的view.移动问题
view在addsubview后,没法响应touch事件..
最后原因是我在初始化view的时候,把那个cell删除掉了..以至于view无法接收touch事件.
就在这个点上.我卡了半天..
这个demo中,我没有实现insert cell的操作..只是实现了delete cell的操作.
demo的核心部分就是touch事件的传递和event链.
至于其他的都好解决.
blog不让上传附件.我就发在cocoachina上了