我在tableView
内部有一个pageViewController
,当在一个单元格上滑动以显示删除单元格的选项时,只能在某些情况下识别手势,比如你快速刷卡并积极地。
我认为这种情况正在发生,因为它不确定滑动手势是针对pageView
还是tableView
。有没有办法专门确定滑动手势发生的位置,以便能够顺利显示删除按钮?
答案 0 :(得分:6)
我遇到了同样的问题。我找到了一个运作良好的解决方案。
将其放入UIPageViewController
的{{1}}功能。
viewDidLoad
PageViewControllers有一个自动生成的子视图,用于处理手势。我们可以阻止这些子视图取消内容触摸。 tableview将能够捕获删除按钮的滑动,同时仍然可以解释将tableview的手势要求作为页面滑动失败的滑动。删除按钮将显示在您按住并滑动或“积极地”滑动的情况下。
答案 1 :(得分:0)
您也可以在tableView本身上将delaysContentTouches设置为false。此解决方案适用于我的收藏夹视图的UISlider元素。
请参见下面的Swift 4.0代码:
yourTableView.delaysContentTouches = false
答案 2 :(得分:0)
我找到了一个可行的解决方案,即将UIScrollView
的{{1}}的{{1}}分配给我的班级,并在检测到从右到左平移时忽略了原始的委托。我为此使用了方法。
请检查我的示例项目:https://github.com/kambala-decapitator/SwipeToDeleteInsidePageVC
答案 3 :(得分:0)
理论:
UIPageViewController
和UITableView
都是使用UIScrollView
实现的,其中UIPageViewController
嵌入UIScrollView
,而UITableView
是{{1}的子类}
UIScrollView
还使用了UITableView
来引入所有魔力。 UIPanGestureRecognizer
是其中之一,它可以处理滑动操作以删除操作。
此问题是由于UISwipeActionPanGestureRecognizer
个UIPageViewController
与UIPanGestureRecognizer
个UITableView
s的冲突而获胜。
因此,如果UISwipeActionPanGestureRecognizer
的{{1}}处于活动状态,我们就必须如何告诉UIPageViewController
忽略手势。
幸运的是,UITableView
已经提供了一些东西。
UISwipeActionPanGestureRecognizer
的{{1}}在两个手势识别器之间创建一个关系,该关系将防止在另一个手势识别器失败之前调用该手势的动作。
因此,我们要做的就是在触发UIGestureRecognizer
s UIGestureRecognizer
的{{1}}嵌入require(toFail otherGestureRecognizer: UIGestureRecognizer)
s UIPageViewControllers
时失败。
代码:
一个有用的实用程序,用于嵌入UIScrollview
的{{1}}
panGestureRecognizer
将下面的代码添加到UITableView
并握住UISwipeActionPanGestureRecognizer
,然后从UIPageViewController
调用
UIScrollView
答案 4 :(得分:0)
如果您在UIPageViewController的第一个或最后一个viewController中有tableView,则可以考虑先禁用UIPageViewController末尾的弹跳,然后实现this solution。
如果您不知道如何禁用UIPageViewController的弹跳,请查看我的答案here。