iOS 7 iPad:在UIPageViewController中使用UITableView的滑动删除(手势识别冲突)

3
我正在开发一个iOS 7 iPad应用程序的“用户资料”部分。在这个区域,我们会引导用户浏览一系列页面,让他们输入关于自己的信息 - 个人简介、家庭、联系信息等。我设置了一个UIPageViewController来完成这个过程,其中每个用户资料页面都是它自己的UIViewController(带有UIScrollView,因为每个页面可能会很长),这样用户就可以平滑地在页面之间切换。在一些页面上,我们还有UITableView(不占据整个屏幕,因为这是一个iPad应用程序而不是iPhone应用程序),供用户添加信息。因此,在这些页面上的总体简化视图层次结构将是:
UIPageViewController UIScrollView UITableView
我希望用户能够使用轻扫删除手势从UITableView中删除单元格。不幸的是,激活UITableView中轻扫删除的pan手势被UIPageViewController拾取,并滚动到下一页而不是显示删除按钮。让删除按钮显示非常不一致 - 可能有9次中的9次会滚动到下一页。
理想情况下,我希望能够访问UIPageViewController的平移手势识别器,并尝试在其与UITableView的平移手势识别器之间建立一些依赖关系,或者对UIPageViewController的手势识别器进行一些逻辑设置,使其不会在UITableViewController区域内触发,或者其他方式。然而,由于这种现象(无论是bug还是feature),我无法访问UIPageViewController的手势识别器,因此我无法像设置委托和重写gestureRecognizerShouldBegin方法那样做一些事情。我也无法获取UIPageViewController视图的手势识别器。

有人有什么解决此问题的想法吗?

1个回答

1

我不知道如何可靠地进入vcs手势识别页面。 我唯一能提供的想法是如何暂时启用/禁用它们。 我不能保证其是否合规,因为我还没有提交该应用程序,但在我看来它看起来是合法的:

- (void)setScrollEnabled:(BOOL)enabled onPageViewController:(UIPageViewController *)pvc {
    for (UIScrollView *view in pvc.view.subviews) {
        if ([view isKindOfClass:[UIScrollView self]]) {
            view.scrollEnabled = enabled;
        }
    }
}

如果可以接受,这是UIPageViewController上一个类别方法的好候选。

很遗憾,由于每个单独的页面视图控制器中都有一个UIScrollView,我认为这种方法也会捕获那些滚动视图并阻止其滚动,对吗?因为那些单独的页面是UIPageViewController的子视图。这将是不希望发生的情况。 - UberJason
不,pvc中有一个滚动视图,位于包含的vc视图下方(循环的重点是不依赖于pvc视图的任何其他子视图)。循环只深入一层。但我认为我的答案对你来说还不够,因为它确实不能解决选择性使用页面滚动手势的需求。如果没有访问页面视图控制器的gr,我不确定您的问题是否可解决。 - danh
我明白了,感谢您的澄清。不幸的是,我认为您是正确的,这并不能完全解决问题,但如果我将来需要这样做,这是一个好的提示。 - UberJason

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