设置侧抽屉控制器

Set up side drawer controller

基本上我使用 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如果不可能,那么如何设置抽屉?

Note: i am using MMdrawerviewController but you can suggest me any other drawer controller to get rid of this

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

那么,知道...如何解决这个问题吗?

一种可能的方法(我通常遵循的方法)是将 login/signup 部分和应用程序的其余部分保持在单独的 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

中所做的那样

在我的代码中,我完全取消了导航控制器,因为在 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()

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