ios - UIPageViewController 手势识别器

标签 ios uigesturerecognizer

我的 Viewcontroller 加载了一个 UIPageViewController。

View Controller 具有被 PageViewControllers 手势识别器覆盖的按钮。

例如,我在 viewcontroller 的右侧有一个按钮,当您按下该按钮时,PageViewController 会接管并更改页面。

如何让按钮接收触摸并取消 PageViewController 中的手势识别器?

我认为 PageViewController 使我的 ViewController 成为其 View 的 subview 。

我知道我可以关闭所有手势,但这不是我想要的效果。

宁愿不要将 PageViewController 子类化,因为苹果说这个类不应该被子类化。

最佳答案

这是另一个解决方案,可以在 Xcode 模板的 self.view.gestureRecognizers = self.pageViewController.gestureRecognizers 部分之后添加到 viewDidLoad 模板中。它避免打乱手势识别器的内部结构或与它的代表打交道。它只是从 View 中删除点击手势识别器,只留下滑动识别器。

self.view.gestureRecognizers = self.pageViewController.gestureRecognizers;

// Find the tap gesture recognizer so we can remove it!
UIGestureRecognizer* tapRecognizer = nil;    
for (UIGestureRecognizer* recognizer in self.pageViewController.gestureRecognizers) {
    if ( [recognizer isKindOfClass:[UITapGestureRecognizer class]] ) {
        tapRecognizer = recognizer;
        break;
    }
}

if ( tapRecognizer ) {
    [self.view removeGestureRecognizer:tapRecognizer];
    [self.pageViewController.view removeGestureRecognizer:tapRecognizer];
}

现在要在页面之间切换,您必须滑动。点击现在仅适用于页面 View 顶部的控件(这正是我所追求的)。

关于ios - UIPageViewController 手势识别器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7788780/

相关文章:

ios - 我希望用户仅在他/她在 swift 3 中点击 uipickerview 时才选择国家

objective-c - 顶部检测触摸的透明 UIView

objective-c - 单点触控设备只会崩溃

ios - 如何使用 swift 4 显示本地时区的日落时间?

ios - 将点击操作附加到 UILabel 文本的一部分

ios - 如何在 ios (Swift 3) 中将 MKPlacemark 存储到 Realm?

ios - 制作一个 UILabel block 触摸事件到它背后的 UIViews

iphone - iOS 识别触摸但不拦截它

ios - swift 3 : UIScrollView and (disabling) Gesture Recognizers

ios - 如何从锁定屏幕控制 AVPlayer 的播放和暂停。以及如何在锁定屏幕上设置应用程序图像