TableView中嵌套TableView

2018-07-11  本文已影响0人  limbo_lyn

效果


首先分析下这个界面的构成。

这个界面总共由三个TableView构成,最外层一个TableView,两个栏目分别对应两个TableView。


基本解决思路

监听最外层TableView滑动事件,滑动时判断是外层TableView滑动,还是内部TableView

滑动

代码解释:默认情况下gestureRecognizer会返回false,表示手势有冲突时,忽略自己的事件,在这个场景下,可以简化认为是否处理滑动事件(因为滑动时内部TableView时,外部TableView和内部TableView包括其他的View都会引发这个事件,如果默认返回false,事件将会被丢失)。

实现方法的类,作为最层TableView,其中allowGestureEventPassViews的otherGestureRecognizer就是内部的TableView,这样就能保证在事件冲突时,事件依然能被传递和处理。

解决方案

自定义两个基类,包裹住内部TableView和外部TableView,两个TableView同时响应滚动事件,在响应事件中,判断哪个TableView应该滚动

外部容器关键代码

内部容器关键代码

外部容器保存了外部TableView。

内容容器保存内部的TableView,同时也保存了外部的TableView

滚动时,内部和外部的都会调用tableViewDidScroll方法,在内外的tableViewDidScroll中判断应该由TableView滚动。

模块的使用

外部的TableView的cell 是CAPSPageMenu(拥有两个TableView的ViewController),滚动时调用外部容器的tableViewDidScroll。

内部的TableView滚动时,调用内部TableView的tableViewDidScroll

总结

外部的TableView处理手势冲突,使用时,内外的的滚动都交由内外容器去处理,在容器中判断由哪个TableView滚动

实际代码位置

common/view/BaseNestTableView

上一篇 下一篇

猜你喜欢

热点阅读