ios - MMDrawerController:检测菜单关闭 Action 或滑动手势

标签 ios objective-c mmdrawercontroller

我想检测菜单何时关闭。我发现这个解决了question .在接受的答案的评论中,他们说这种方法:

-(void)setGestureCompletionBlock:(void(^)(MMDrawerController * drawerController, UIGestureRecognizer * gesture))gestureCompletionBlock;

必须在 App delegate 中才能在菜单关闭时收到通知。我把这个函数放在我的应用程序委托(delegate)中,在它的实现中我做了一个 NSLog(@"menu closed"); 但是我的控制台没有打印任何东西,当我关闭菜单时这个函数没有被触发.

谁能解释一下我如何检测到菜单已关闭? (基于给定的答案或者如果你有另一个答案)

编辑:

在 Storyboard 中,我有一个 UINavigationController 链接到一个 UIViewController,其类型为 MMDrawerController (myVCMMdrawerController),然后我还有 myCenterVCleftVCrightVC。在 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/

相关文章:

ios - 如何停止在 TableView 单元格中重复图像

ios - UITableViewCell - 如何获取指向重新排序控件的指针?

ios - MMDrawerViewController Objective-C 推送到导航 View Controller

ios - iOS 中导航 Controller 的点击手势 (MMDrawerController)

ios - 创建数据表

ios - 谁一直在用MMDrawerController,手势冲突怎么解决

ios - 应用被杀死时如何判断应用是从NotificationCenter(Local Notification)打开还是从应用图标打开

ios - presentingViewController 总是得到 UITabBarController

ios - 使用 swift 3 在 UIView 上添加阴影

objective-c - 如何在 Objective-C 中编写 'global' 内联函数(使用 C 语法)