访问UIPageViewController手势识别器以启用滑动删除。

4

我想让在UITableView上的滑动删除与UIPageViewController的分页机制相结合。我希望设置UIPageViewController的手势识别器,以便可以更改它的代理并实现:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
    if let _ = touch.view as? UITableViewCell {
        return false
    }

    return true
}

我的问题是找不到UIPageViewController的手势识别器。我已经尝试查看:

myPageViewController.gestureRecognizers
myPageViewController.view.gestureRecognizers

myPageContentViewController.gestureRecognizers
myPageContentViewController.view.gestureRecognizers

这个问题是关于在 UIPageViewController 中实现 UITableView 的滑动删除功能的位置和更好的解决方案。

2个回答

2
手势是附加在其scrollView上的,而这个scrollView不是公共属性。无论如何,我使用此扩展程序来获取scrollView:
extension UIPageViewController {

    public var scrollView: UIScrollView? {
        for view in self.view.subviews {
            if let scrollView = view as? UIScrollView {
                return scrollView
            }
        }
        return nil
    }

}

您想要它的Pan手势:

pageController.scrollView?.panGestureRecognizer

我猜我应该接受这个答案,因为它回答了我的问题,但不幸的是你不能更改panGestureRecognizer的委托。我会得到一个致命错误“UIScrollView的内置pan手势识别器必须将其滚动视图作为其委托”,所以我的问题仍然没有解决。 - jjatie
你可以尝试使用 - (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer; 来避免滑动和平移之间的冲突。 - tgyhlsb
有趣的想法。我还没有在表视图单元格上找到滑动手势识别器,而且,我需要为每个单元格调用该方法,对吗? - jjatie
你找到解决方案了吗? - AXE

0

要处理UITableView单元格滑动,可以使用UIPageViewController以下子类

它还允许管理循环、边缘反弹、pageControl可见性。

主要思路是添加自己的平移手势识别器并覆盖它的委托方法。

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool

我们允许或禁止在UIPageViewController中的QueuingScrollView和包含UIScrollView的其他手势同时识别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接