Set up side drawer controller

我怕爱的太早我们不能终老 提交于 2019-12-23 16:15:46

问题


basically i use MMDrawerviewController for side drawer and my setup for storyboard prototype is like below

and my code is as successful login is

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

Problem
When i login and push to vc1 it gives me back button(obviously because i am pushed through nav1)..and if i am trying to hide but not able to do it...don't know why.

So the question is how can i change the navigation controller after it is pushed from the other navigation controller like push with nav1 and as i get vc1 i want to change navigation controller to nav2 and if it is not possible then how to setup the drawer?

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

In appdelegate what i do is

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

So, any idea...how to resolve this?


回答1:


in my code I took away the navigation controller at all because on MMDrawer we set it programatically. Look to this code:

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()

you already have navigation controller. Second Issue on the viewcontroller that comes after login view controller i set navigation bar ! So you just need to hide common navigation bar and show navigation bar that you set manually!




回答2:


One Possible approach to that, one which i normally follow, is to keep the login/signup section and the rest of the app under separate navigation controllers. The login section will be your initial root view controller. So when you want to launch into the main page after login, you can just change the root view controller to the second navigation controller or the drawer-container, depending on your case :

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

This can be done vice-versa for logout. cheers

PS : also take a look at SWRevealViewController. Its easy to use once you get the hang of things. and can be configured using storyboard segues.

UPDATE : In you code above, it seems you are pushing the drawer containing vc1 into nav1, which is the navigation controller which has the login screen.

Instead, what you can do is : instead of

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

you can set nav2 as the root view controller, just like you did in appDelegate



来源:https://stackoverflow.com/questions/29944715/set-up-side-drawer-controller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!