推送视图控制器后导航控制器隐藏

Posted

技术标签:

【中文标题】推送视图控制器后导航控制器隐藏【英文标题】:Navigationcontroller is hidden after pushing viewcontroller 【发布时间】:2014-01-12 02:18:55 【问题描述】:

我正在开发一个应用程序,但我遇到了UINavigationcontroller 的问题。

首先在应用程序委托中,我检查用户是否已登录,如果是,我将他带到主屏幕,如果没有,我将他带到登录屏幕。

这是我的代码:

    UINavigationController *diabetesNavigationController = [UINavigationController alloc];
LoginViewController *loginPage = [[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:nil];
MainViewController *mainPage = [[MainViewController alloc]initWithNibName:@"MainViewController" bundle:nil];


if ([DataStore instance].userIsLoggedIn)
    diabetesNavigationController = [diabetesNavigationController initWithRootViewController:mainPage];
else
    diabetesNavigationController = [diabetesNavigationController initWithRootViewController:loginPage];


NSDictionary *navbarTitleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];
[[UINavigationBar appearance]setBarTintColor:[UIColor orangeColor]];
[[UINavigationBar appearance]setTintColor:[UIColor whiteColor]];
[[UINavigationBar appearance]setTitleTextAttributes:navbarTitleTextAttributes];

[self.window setRootViewController:diabetesNavigationController];

用户注销时的问题,他返回登录屏幕但没有navigationcontroller

我在 MainViewController 中做了一些东西,就是这样的:

-(void)viewDidAppear:(BOOL)animated


    self.navigationItem.title = @"Diabetes";
    UIBarButtonItem *settingButton=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"burger.png"]
                                                               style:UIBarButtonItemStylePlain
                                                              target:self
                                                              action:@selector(onBurger:)];
    self.navigationItem.rightBarButtonItem = settingButton;
    self.navigationItem.leftBarButtonItem.enabled = YES;

所以当我注销用户时,使用以下代码:

LoginViewController *loginPage = [[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:nil];
    [self.navigationController setViewControllers:[NSArray arrayWithObjects:loginPage, nil] animated:YES];

我进入了登录屏幕,但没有Navigationcontroller。我尝试在所有视图代理中将 Hidden 属性设置为 NO,但仍然存在此问题。

【问题讨论】:

你试过了吗 - (void)viewWillAppear:(BOOL)animated [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:NO animated:animated]; 是的,我做了,仍然是同样的问题 是的,我做了,仍然没有工作。 【参考方案1】:

你可以试试这个:

UIWindow *window = [UIApplication sharedApplication].keyWindow;
LoginViewController * loginPage = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController: loginPage];
[window.rootViewController presentViewController:nav animated:YES completion:NULL];

让我知道它是否有效.. :)

【讨论】:

不,它没有用。 Um 处理导航项以放置菜单项但负责推拉的问题是导航控制器本身而不是导航项。当我尝试从导航控制器更改导航项时,它不会影响。 将导航控制器传递给普通视图控制器的问题。 ViewController 不能容纳导航控制器。 嗯用视图控制器初始化导航控制器。并将导航项放入其中。

以上是关于推送视图控制器后导航控制器隐藏的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 推送带有隐藏导航栏的视图控制器

iOS - 仅在一个视图上隐藏导航栏?

在导航控制器中推送控制器时如何隐藏父标签栏

在导航控制器中添加标签栏控制器时隐藏后退按钮

在呈现模态视图控制器后推送导航控制器

如何导航到推送通知上的视图控制器