设置侧抽屉控制器
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 controller
或 drawer-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 进行配置。
更新: 在上面的代码中,您似乎将包含 vc1
的 drawer
推入 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 的第二个问题我设置了导航栏!所以你只需要隐藏常用导航栏和显示你手动设置的导航栏!
基本上我使用 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 controller
或 drawer-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 进行配置。
更新: 在上面的代码中,您似乎将包含 vc1
的 drawer
推入 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 的第二个问题我设置了导航栏!所以你只需要隐藏常用导航栏和显示你手动设置的导航栏!