ios - 如何向 ViewController 及其子级添加手势识别器?

标签 ios swift uigesturerecognizer gesture

我正在制作像欧洲体育那样的应用程序。我的 rootviewController 是 pageViewController,它有 3 个 VC。左右滑动即可更改 VC。接下来,我添加了侧边栏菜单。我想将手势识别器添加到整个 rootViewController 中。这就是我添加手势的方式:

 self.exitPanGesture = UIPanGestureRecognizer()
        self.exitPanGesture.addTarget(self, action:"handleOffstagePan:")
        self.sourceViewController.view.addGestureRecognizer(self.exitPanGesture)
        self.sourceViewController.navigationController?.view.addGestureRecognizer(self.exitPanGesture)

当我拖动 rootviewController 并点击导航栏时,它可以工作。但其他部分如segmentcontrol和pageContent不起作用。

我在这里设置sourceViewController:

 func resetToMainPage(index: Int!) {
    /* Getting the page View controller */
    mainPageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("MainPageViewController") as UIPageViewController
    self.mainPageViewController.dataSource = self
    self.mainPageViewController.delegate = self

    pageContentViewController = self.viewControllerAtIndex(index)

   // self.transtionManger.sourceViewController = pageContentViewController // adding swipe to the pageContentViewControlle in order to close menu
    self.transtionManger.sourceViewController = mainPageViewController
    self.mainPageViewController.setViewControllers([pageContentViewController!], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)


    self.mainPageViewController.view.frame = CGRectMake(0, 102, self.view.frame.width, self.view.frame.height)
    self.addChildViewController(mainPageViewController)
    self.view.addSubview(mainPageViewController.view)
    self.mainPageViewController.didMoveToParentViewController(self)

}

那么,我的问题是如何向整个rootViewController添加手势识别器,包括navbar,segmentcontrol,pageviewcontrol?

最佳答案

手势识别器只能附加到一个 View 。因此,下面的行意味着只有 navigationController?.view 正在添加手势。

self.sourceViewController.view.addGestureRecognizer(self.exitPanGesture)
self.sourceViewController.navigationController?.view.addGestureRecognizer(self.exitPanGesture)

您只需为您想要的每个 View 复制手势识别器,然后以这种方式添加它们。

self.exitPanGesture1 = UIPanGestureRecognizer()
self.exitPanGesture1.addTarget(self, action:"handleOffstagePan:")
self.sourceViewController.view.addGestureRecognizer(self.exitPanGesture1)

self.exitPanGesture2 = UIPanGestureRecognizer()
self.exitPanGesture2.addTarget(self, action:"handleOffstagePan:")
self.sourceViewController.navigationController?.view.addGestureRecognizer(self.exitPanGesture2)

关于ios - 如何向 ViewController 及其子级添加手势识别器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30488753/

相关文章:

ios - 在 GameScene 中显示 UIAlertController (SpriteKit/Swift)

swift - 使用带有逻辑 AND 运算符 && 的 Swift if let

json - 匹配行选择传递数据

objective-c - 从 UIPanGestureRecognizer 获取原始触摸位置

ios - 无法让 UISwipeGestureRecognizer 工作,从不检测滑动?

javascript - 如何将大量文本从 webview 发送到 objc?

ios - Spotify ios sdk 在所有 requestItemAtURI 上突然失败

ios - UIPanGestureRecognizer 与 ScrollView 冲突

ios - SecItemAdd() 使用 kSecAttrAccessibleWhenUnlocked 成功但使用 kSecAttrAccessibleWhenUnlockedThisDeviceOnly 失败

iphone - UINavigationController:如何取消后退按钮事件?