TableView中嵌套TableView

效果




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

这个界面总共由三个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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容