设计与Swipe-Delete不冲突的UIPageViewController

当在UIPageViewController中添加UITableView时,如果:

  1. UITableView处在最右边的vc中
  2. UITableView开启了左滑删除(Swipe-Delete)功能

那左滑删除手势和UIPageViewController的滚动手势会有冲突,本文尝试解决该问题,并分享了一个实现源码

对于手势冲突的问题,我会想通过UIGestureDelegate的几个方法来让冲突的手势协同工作。但UIPageViewController并没有提供方法获取或修改滚动手势。于是我的解决方案就是:

自定义UIPageViewController,自己控制手势

自定义UIPageViewController

初步设想用 UIScrollView 作为展示载体,这样更容易实现左右滑动

由于UIScrollView本身的滚动手势识别器-- panGestureRecognizer 由其内部控制,我们需要禁用掉。取而代之的是添加自定义的 UIPanGestureRecognizer

手势协同

当最右边vc中有UITableView时,当左滑时,通过实现 UIGestureRecognizerDelegatefunc gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool 方法,使我们自己的 panGestureRecognizer 不执行。以此来提高UITableView的左滑删除手势优先级

管理Child ViewController

没有自定义container viewcontroller经验的话这一步很容易出错

最初我的设计是,每往UIPageViewController添加一个vc,就将它的view添加到UIScrollView中,UIScrollView一直持有着这些vc

但后来经高人指点--这是不行的,因为

  1. child vc的生命周期可能因此混乱
  2. 原生的UIPageViewController是实时的获取child vc,同一时间只会持有一个vc

基于上面的考虑,我在设计时

setViewController
我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章