【问题标题】:Set up side drawer controller设置侧抽屉控制器
【发布时间】:2015-05-09 22:24:55
【问题描述】:

基本上我使用MMDrawerviewController 作为侧抽屉,我的故事板原型设置如下

我的代码和成功登录一样

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

MenuVC *menuViewController = [storyboard instantiateViewControllerWithIdentifier:@"MenuVC"];

UIViewController *centerViewController = [storyboard instantiateViewControllerWithIdentifier:@"VC1"];


MMDrawerController *drawer = [[MMDrawerController alloc] initWithCenterViewController:centerViewController leftDrawerViewController:menuViewController];

((VC1 * )centerViewController).drawer = drawer;
menuViewController.drawer = drawer;


[drawer setRestorationIdentifier:@"MMDrawer"];
[drawer setOpenDrawerGestureModeMask:MMOpenDrawerGestureModeAll];
[drawer setCloseDrawerGestureModeMask:MMCloseDrawerGestureModeAll];

[drawer
 setDrawerVisualStateBlock:^(MMDrawerController *drawerController, MMDrawerSide drawerSide, CGFloat percentVisible) {
     MMDrawerControllerDrawerVisualStateBlock block;
     block = [[MMExampleDrawerVisualStateManager sharedManager]
              drawerVisualStateBlockForDrawerSide:drawerSide];
     if(block){
         block(drawerController, drawerSide, percentVisible);
     }
 }];

[self.navigationController pushViewController:drawer animated:YES];

问题
当我登录并推送到vc1 时,它给了我返回按钮(显然是因为我被推过nav1)......如果我试图隐藏但无法做到......不知道为什么。

所以问题是如何在从其他导航控制器推送导航控制器后更改导航控制器,例如使用 nav1 推送,当我得到 vc1 时,我想将导航控制器更改为 nav2,如果不可能那么如何设置抽屉呢?

注意:我正在使用MMdrawerviewController,但你可以建议我使用任何其他抽屉控制器来摆脱这个

appdelegate 我所做的是

 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *navController;

if (i have user data)

    navController = [storyboard instantiateViewControllerWithIdentifier:@"Nav1"];

}
else
{
    navController = [storyboard instantiateViewControllerWithIdentifier:@"Nav2"];
}

[self.window setRootViewController:navController];  

那么,有什么想法...如何解决这个问题?

【问题讨论】:

    标签: ios objective-c navigation-drawer uistoryboard


    【解决方案1】:

    在我的代码中,我完全取消了导航控制器,因为在 MMDrawer 上我们以编程方式设置它。查看这段代码:

    var rootViewController = self.window!.rootViewController
    
        let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    
        var centerViewController  = mainStoryBoard.instantiateViewControllerWithIdentifier("LoginPageViewController") as LoginPageViewController
        //var rootViewController = centerViewController
    
        var leftViewController = mainStoryBoard.instantiateViewControllerWithIdentifier("SideBarTableViewController") as SideBarTableViewController
        var leftSideNav = UINavigationController(rootViewController: leftViewController)
        var centerSideNav = UINavigationController(rootViewController: centerViewController)
    
        centerContainer = MMDrawerController(centerViewController: centerSideNav, leftDrawerViewController: leftViewController)
    
    
        centerContainer!.openDrawerGestureModeMask = MMOpenDrawerGestureMode.PanningCenterView
       // centerContainer!.openDrawerGestureModeMask = MMOpenDrawerGestureMode.None
        centerContainer!.closeDrawerGestureModeMask = MMCloseDrawerGestureMode.PanningCenterView
    
        window!.rootViewController = centerContainer
        window!.makeKeyAndVisible()
    

    您已经有了导航控制器。登录视图控制器后出现的视图控制器的第二个问题我设置了导航栏!所以你只需要隐藏常用的导航栏,显示你手动设置的导航栏!

    【讨论】:

      【解决方案2】:

      我通常遵循的一种可能方法是将登录/注册部分和应用程序的其余部分保留在单独的 navigation controllers 下。登录部分将是您的初始root view controller。因此,当您想在登录后启动主页面时,您可以将根视图控制器更改为第二个navigation controllerdrawer-container,具体取决于您的情况:

      //Get instance of AppDelegate
      AppDelegate *appDelegateTemp = [[UIApplication sharedApplication] delegate];
      
      Get the second viewController/navigationController
      UIViewController* rootController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"MainPageHost"];
      
      //set it as the new root
      appDelegateTemp.window.rootViewController = rootController;
      

      这可以在注销时进行,反之亦然。干杯

      PS : 也看看SWRevealViewController。一旦掌握了窍门,它就很容易使用。并且可以使用故事板segues进行配置。

      更新:在您上面的代码中,您似乎正在将包含vc1drawer 推入nav1,这是具有登录屏幕的导航控制器。

      相反,你可以做的是:而不是

      [self.navigationController pushViewController:drawer animated:YES];

      您可以将 nav2 设置为根视图控制器,就像您在 appDelegate 中所做的那样

      【讨论】:

      • 我已经这样做了...如果我登录成功,我会优先存储数据,并据此设置了根视图...
      • 但是你的登录部分在抽屉控制器下面对吗??
      • 登录后...我想要 vc1 中的抽屉..还要更改导航控制器
      • 我只是在登录成功后将rootviewcontroller设置为nav2,但还没有工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多