【问题标题】:how to add gesture recognizer to ViewController and to its Children?如何将手势识别器添加到 ViewController 及其子项?
【发布时间】:2015-05-27 16:56:42
【问题描述】:

我正在制作类似于 Euro Sport 的应用程序。我的 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?

【问题讨论】:

    标签: ios swift uigesturerecognizer gesture


    【解决方案1】:

    手势识别器只能附加到一个视图。所以下面的行意味着只有navigationController?.view 正在添加手势。

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

    你可以为每个你想要的视图复制手势识别器,然后添加它们。

    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)
    

    【讨论】:

    • 现在,我不能这样做有两个原因:1) 不能像这样 sourceviewcontroller.pageviewcontroller 访问 pageviewcontroller(找不到它),接下来 2) 我将使用这个解决方案与不同的 VC,其中一些有浏览量,其他人没有!
    • 我不确定。不久前我发现了this answer,这就是为什么我知道要做多个手势来做同样的事情。
    【解决方案2】:

    伙计们,我解决了我的问题,但我遇到了另一个问题。就我而言,我创建了 exitGestureRecognizer。我想将此添加到整个视图控制器视图中。所以,这是我的代码:

     for singleView in self.sourceViewController.view.subviews {
                    singleView.addGestureRecognizer(exitPanGesture)
                    singleView.navigationController??.view.addGestureRecognizer(exitPanGesture)
                }
    

    由于某种原因,navBar.view 上的识别器不起作用。如果我这样写代码:

    for singleView in self.sourceViewController.view.subviews {
                singleView.addGestureRecognizer(exitPanGesture)
                singleView.navigationController??.view.addGestureRecognizer(exitPanGesture)
            }
    self.sourceViewController.navigationController?.view.addGestureRecognizer(self.exitPanGesture)
    

    只有导航栏手势有效,子视图手势无效。如果我更改此代码的顺序。导航栏手势不起作用,但子视图手势起作用。如何向两个视图添加手势?

    【讨论】:

      猜你喜欢
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多