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

Posted

技术标签:

【中文标题】iOS 7 iPad:UIPageViewController 中的 UITableView 滑动删除(手势识别器冲突)【英文标题】:iOS 7 iPad: UITableView swipe-to-delete in a UIPageViewController (conflicting gesture recognizers) 【发布时间】:2014-02-24 15:24:47 【问题描述】:

我正在开发 ios 7 iPad 应用程序的“用户配置文件”部分。在这个区域,我们引导用户浏览一系列页面,他们在其中输入有关自己的信息 - 传记信息、家庭、联系信息等。我设置它的方式是通过 UIPageViewController,其中用户个人资料的每个页面是它自己的 UIViewController(带有 UIScrollView,因为每个页面都会变长),以便用户在浏览页面时可以平滑地在页面之间滑动。在一些页面上,我们还有 UITableViews(不占用整个屏幕,因为这是一个 iPad 应用程序而不是 iPhone 应用程序)供用户添加信息。因此,这些页面上的整体简化视图层次结构将是:

UIPageViewController UIScrollView UITableView

我希望用户能够使用滑动删除手势从 UITableView 中删除单元格。不幸的是,在 UITableView 中激活滑动删除的平移手势正在被 UIPageViewController 拾取并滚动到下一页而不是显示删除按钮。显示删除按钮非常不一致 - 可能 10 次中有 9 次会滚动到下一页。

理想情况下,我会访问 UIPageViewController 的平移手势识别器并尝试在它和 UITableView 的平移手势识别器之间建立一些依赖关系,或者有一些逻辑让 UIPageViewController 的手势识别器不在 UITableViewController 的区域内触发,或者其他的东西。但是,由于this phenomenon(无论是错误还是功能),我无法访问 UIPageViewController 的手势识别器,因此我无法执行诸如设置其委托和覆盖诸如gestureRecognizerShouldBegin 之类的方法之类的操作。我也无法获取 UIPageViewController 视图的手势识别器。

有人对如何规避这个问题有任何想法吗?

【问题讨论】:

【参考方案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 的子视图。这是不受欢迎的。 不,pvc 中有一个滚动视图,位于包含的 vc 视图下方(循环的重点是不依赖于 pvc 视图的任何其他子视图)。循环只深入一层。但是我觉得无论如何我的回答对你来说还是不够的,因为它确实不能解决选择性使​​用页面滚动手势的需要。如果不访问页面视图控制器的 gr,我不确定您的问题是否可以解决。 我明白了,感谢您的澄清。不幸的是,我认为您是对的,这并不能完全解决问题,但如果我需要这样做,请记住这是一个很好的提示。

以上是关于iOS 7 iPad:UIPageViewController 中的 UITableView 滑动删除(手势识别器冲突)的主要内容,如果未能解决你的问题,请参考以下文章

隐藏状态栏 iPad iOS 7.0

iOS 7 onchange 事件在 iPad 3+Mini 中被破坏 // 需要解决

带有 ModalPresentationStyle 的弹出框不在 iOS 7 iPad 中居中

iOS/xCode 7 表格单元格不在 iPad 上绘图

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

检测应用程序是不是安装在 iPad 或 iPhone 上(iOS 6 到 iOS 7)