我正在尝试在我的应用程序中使用MMDrawerController,但我无法通过中心视图上的手势关闭侧抽屉。我已经在我的应用程序中的其他地方使用了MMDrawerController并取得了巨大成功,但无法弄清楚为什么它在这种情况下不起作用。
顶级View Controller是一个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)
}
答案 0 :(得分:0)
通过将ContainerView作为我视图中唯一的对象,然后从我的ViewController配置MMDrawerContainer,我能够解决这个问题。它似乎不是正确的答案,但从用户的角度来看,一切都看起来和功能正常。
答案 1 :(得分:0)
好的,所以我遇到了同样的问题,我几乎可以肯定它来自于此:
好的,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相同但使用LeftSwipe和closeDrawer。
解决方案是将这些功能和手势识别器都放在VC3(DrawerController)中。
问题来自这样一个事实:您的手势是为给定的VC定义的,但是当您打开抽屉时,它会将当前的VC更改为新的VC,并且之前的VC仅显示但不能显示与...互动。通过将东西放在VC1 / VC2的parentVC中,它可以解决问题。