2017-07-03 55 views
0

我想檢測菜單何時關閉。我發現這個解決了question。在接受答案的評論,他們說,這種方法:MMDrawerController:檢測菜單關閉操作或刷卡手勢

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

必須在App delegate,以通知當菜單關閉。我把這個函數放在我的應用程序委託中,在它的實現中,我做了一個NSLog(@"menu closed");,但是在我的控制檯中沒有打印任何內容,並且在關閉菜單時該功能未被觸發。

任何人都可以解釋我請如何檢測菜單是否關閉? (根據給定的答案,或者如果您有其它的)

編輯:

在故事板,我有鏈接到其類型的MMDrawerController(myVCMMdrawerController)的UIViewController的一個UINavigationController的,那麼我也myCenterVCleftVCrightVC。在myVCMMdrawerControllerviewDidLoad這是我做的:

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]; 

回答

2

這裏是爲我的作品的代碼:

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's openSide is left否則其關閉。

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; 
} 
+0

能否請您提供'客觀C'版本? –

+0

@Llg您好我更新Objective-C解決方案 –

+0

謝謝!如果我在UIViewController中創建抽屜會怎麼樣?在應用程序委託我創建了MMDrawerController * mainDrawer作爲屬性,然後在我的UIViewController中,我將這個mainDrawer設置爲UIViewController中的一個。但似乎沒有設置mainDrawer。請問你有關於這個問題的想法嗎?再次感謝 –