我想检测菜单何时关闭。我发现这个解决了question .在接受的答案的评论中,他们说这种方法:
-(void)setGestureCompletionBlock:(void(^)(MMDrawerController * drawerController, UIGestureRecognizer * gesture))gestureCompletionBlock;
必须在 App delegate
中才能在菜单关闭时收到通知。我把这个函数放在我的应用程序委托(delegate)中,在它的实现中我做了一个 NSLog(@"menu closed");
但是我的控制台没有打印任何东西,当我关闭菜单时这个函数没有被触发.
谁能解释一下我如何检测到菜单已关闭? (基于给定的答案或者如果你有另一个答案)
编辑:
在 Storyboard 中,我有一个 UINavigationController 链接到一个 UIViewController,其类型为 MMDrawerController (myVCMMdrawerController
),然后我还有 myCenterVC
,leftVC
和 rightVC
。在 myVCMMdrawerController
viewDidLoad
这就是我所做的:
MyCenterVC * centerVC = [[self storyboard] instantiateViewControllerWithIdentifier:@"myCenterVC"];
centerVC.drawerController = self;
LeftVC * leftVC = [[self storyboard] instantiateViewControllerWithIdentifier:@"leftVC"];
leftVC.drawerController = self;
self.centerViewController = centerVC;
self.leftDrawerViewController = leftVC;
self.showsShadow = false;
//[self setMaximumLeftDrawerWidth:[UIScreen mainScreen].bounds.size.width animated: true completion: nil];
//enable gesture
self.openDrawerGestureModeMask = MMOpenDrawerGestureModeAll;
self.closeDrawerGestureModeMask = MMCloseDrawerGestureModeAll;
[self closeDrawerAnimated:NO completion:nil];
在 myCenterVC
中,我执行以下操作以在 IBActions 中显示菜单:
[self.drawerController toggleDrawerSide:MMDrawerSideLeft animated:true completion:nil];
最佳答案
这是适合我的代码:
swift 3.0+
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let leftDrawer = UIViewController()
leftDrawer.view.backgroundColor = UIColor.red
let centerDrawer = UIViewController()
centerDrawer.view.backgroundColor = UIColor.green
let mainContainer = MMDrawerController(center: centerDrawer, leftDrawerViewController: leftDrawer)
mainContainer?.openDrawerGestureModeMask = .panningCenterView
mainContainer?.closeDrawerGestureModeMask = .panningCenterView
mainContainer?.setGestureCompletionBlock({ (drawer, gesture) in
if drawer?.openSide != .left {
print("Drawer Closed")
}else {
print("Drawer Opened")
}
})
window?.rootViewController = mainContainer
window?.makeKeyAndVisible()
return true
您可能必须确保设置
mainContainer?.openDrawerGestureModeMask = .panningCenterView
mainContainer?.closeDrawerGestureModeMask = .panningCenterView
并检查 drawer 的 openSide 是否离开
,否则它是关闭的。
objective-C
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
UIViewController *leftDrawer = [[UIViewController alloc] init];
[[leftDrawer view] setBackgroundColor:[UIColor redColor]];
UIViewController *centerDrawer = [[UIViewController alloc] init];
[[centerDrawer view] setBackgroundColor:[UIColor greenColor]];
MMDrawerController *mainDrawer = [[MMDrawerController alloc] initWithCenterViewController:centerDrawer leftDrawerViewController:leftDrawer];
mainDrawer.openDrawerGestureModeMask = MMOpenDrawerGestureModePanningCenterView;
mainDrawer.closeDrawerGestureModeMask = MMOpenDrawerGestureModePanningCenterView;
[mainDrawer setGestureCompletionBlock:^(MMDrawerController *drawerController, UIGestureRecognizer *gesture) {
if (drawerController.openSide != MMDrawerSideLeft) {
NSLog(@"Drawer Closed");
}else{
NSLog(@"Drawer Opened");
}
}];
self.window.rootViewController = mainDrawer;
[self.window makeKeyAndVisible];
return YES;
}
关于ios - MMDrawerController:检测菜单关闭 Action 或滑动手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44889794/