Ios 设置侧抽屉控制器

Ios 设置侧抽屉控制器,ios,objective-c,navigation-drawer,uistoryboard,Ios,Objective C,Navigation Drawer,Uistoryboard,基本上,我对侧抽屉使用MMDrawerviewController,故事板原型的设置如下所示 我的代码和成功登录的代码一样 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; MenuVC *menuViewController = [storyboard instantiateViewControllerWithIdentifier:@"MenuVC"]; UIViewContr

基本上,我对侧抽屉使用
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];  

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

一种可能的方法,我通常遵循的方法是,将登录/注册部分和应用程序的其余部分置于单独的
导航控制器下。登录部分将是您的初始
根视图控制器
。因此,当您想在登录后进入主页时,只需将根视图控制器更改为第二个
导航控制器
抽屉容器
,具体取决于您的情况:

//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;
注销时也可以这样做,反之亦然。干杯

附言:还可以看一看。一旦你掌握了窍门,它很容易使用。并且可以使用故事板序列进行配置

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

相反,你能做的是:代替

[self.navigationController pushViewController:抽屉动画:是]


您可以将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的第二个问题是在登录viewcontroller之后我设置了导航栏!所以您只需要隐藏公共导航栏并显示手动设置的导航栏

我已经这样做了…我所做的是,如果我成功登录,我会优先存储数据,并根据这一点,我设置了根视图…但您的登录部分就在抽屉控制器下??登录后…我希望抽屉在vc1中..但也更改导航控制器我只是在登录后将根视图控制器设置为nav2成功但尚未奏效