在pageViewController内的tableView上滑动以删除

时间:2016-04-18 05:28:11

标签: ios swift tableview uipageviewcontroller tableviewcell

我在tableView内部有一个pageViewController,当在一个单元格上滑动以显示删除单元格的选项时,只能在某些情况下识别手势,比如你快速刷卡并积极地。

我认为这种情况正在发生,因为它不确定滑动手势是针对pageView还是tableView。有没有办法专门确定滑动手势发生的位置,以便能够顺利显示删除按钮?

5 个答案:

答案 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)

理论:

UIPageViewControllerUITableView都是使用UIScrollView实现的,其中UIPageViewController嵌入UIScrollView,而UITableView是{{1}的子类}

UIScrollView还使用了UITableView来引入所有魔力。 UIPanGestureRecognizer是其中之一,它可以处理滑动操作以删除操作。

此问题是由于UISwipeActionPanGestureRecognizerUIPageViewControllerUIPanGestureRecognizerUITableView 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