1

我正在尝试在我的应用程序中使用 MMDrawerController,但我无法通过中心视图上的手势关闭侧抽屉。我在我的应用程序的其他地方使用了 MMDrawerController 并取得了巨大的成功,但无法弄清楚为什么它在这种情况下不起作用。

顶层视图控制器是一个 UINavigationController,它的默认视图控制器是 MasterViewController(源代码如下)。这个类扩展了 MMDrawerController 并配置了我想要的视图(中心和右边,关闭手势,最大宽度)。中心视图有一个打开抽屉的按钮。一旦抽屉打开,我就无法用中央视图上的手势关闭它。我在抽屉中添加了一个按钮,它可以以编程方式关闭抽屉,但我需要能够在中心视图上进行制表符/平移。

类 MasterViewController:MMDrawerController {

override func viewDidLoad() {
    let centerView = storyboard!.instantiateViewControllerWithIdentifier("CenterControllerName") as? CenterControllerType
    super.setCenterViewController(centerView, withCloseAnimation: false, completion: nil)
    let drawer = storyboard!.instantiateViewControllerWithIdentifier("Drawer") as? DrawerType
    super.rightDrawerViewController = drawer
    super.setMaximumRightDrawerWidth(200, animated: true, completion: nil)
    super.closeDrawerGestureModeMask = MMCloseDrawerGestureMode.PanningCenterView | MMCloseDrawerGestureMode.TapCenterView
}

}

打开抽屉的功能:

@IBAction func drawerButtonPressed(sender: AnyObject) {
    drawer?.openDrawerSide(MMDrawerSide.Right, animated: true, completion: nil)
}
4

2 回答 2

0

我可以通过将 ContainerView 作为我视图中的唯一对象,然后从我的 ViewController 配置 MMDrawerContainer 来解决此问题。这似乎不是正确的答案,但从用户的角度来看,一切看起来和功能都是正确的。

于 2014-11-25T22:06:24.267 回答
0

好的,所以我遇到了同样的问题,我几乎可以肯定它来自这个:

guddrawing.png

好的,VC1(带星号)是我们的应用程序 Home,VC2 是左侧抽屉,VC3 是 DrawerController。

很长一段时间我都尝试在VC1和VC2中加入手势功能,但只能在VC1中打开,在VC2中关闭。我在VC1中使用的函数:

let rightSwipe = UISwipeGestureRecognizer(target: self, action: Selector("showDrawer:"))

rightSwipe.direction = .Right
view.addGestureRecognizer(rightSwipe)

...

  func showDrawer(sender: UISwipeGestureRecognizer) {
    if let m = mmdc {
      if !m.isLeftDrawerOpen() {
        m.toggleDrawerSide(MMDrawerSide.Left, animated: true, completion: nil)
      }
    }
  }

与 VC2 中的相同,但带有 L​​eftSwipe 和 closeDrawer。

解决方案是将这些功能和手势识别器都放在 VC3 (DrawerController) 中。

问题在于您的手势是为给定的 VC 定义的,但是当您打开抽屉时,它会将当前 VC 更改为新的 VC,并且之前的 VC 只是显示但不能与之交互。通过将东西放在 VC1/VC2 的 parentVC 中,它解决了这个问题。

于 2016-01-13T08:58:33.540 回答