我目前正在使用 UINavigationController 开发应用程序。我将 Root View Controller 设置为 ViewController1,然后推送 ViewController2,然后推送 ViewController3 以响应按钮单击事件。
如果我随后单击 View 3 中的后退按钮,我将返回到 View 2,但此 View 没有后退按钮。同样有趣的是,在为每个 View (分别为“ View 1”、“ View 2”和“ View 3”)设置标题后,如果我使用后退按钮从 View 3 导航回 View 2,标题将变为 ' View 1' 即初始 View ( View 1)的标题 - 而不是 View 2 的标题。
如果有人知道这里会发生什么,非常感谢您的建议。
非常感谢!
编辑:我使用以下代码在应用程序委托(delegate)中初始化 UINavigationController:
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen] bounds]];
self.viewController1 = [[ViewController1 alloc] init];
self.viewController2 = [[ViewController2 alloc] init];
self.viewController3 = [[ViewController3 alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController1];
self.window.rootViewController = self.navigationController;
我稍后在按钮点击时将 View Controller 推送到 UINavigationController,如下所示:
MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
[self.navigationController pushViewController:appDelegate.viewController2 animated:YES];
最佳答案
我找到了解决方案 - 在 viewController2 和 viewController3 中,我有以下代码来隐藏导航栏(我希望导航栏隐藏在 view1 上,然后在 View 2 和 3 上可见)。
- (void) viewWillAppear:(BOOL)animated
{
[self.navigationController setNavigationBarHidden:NO animated:animated];
[super viewWillAppear:animated];
}
- (void) viewWillDisappear:(BOOL)animated
{
[self.navigationController setNavigationBarHidden:YES animated:animated];
[super viewWillDisappear:animated];
}
我意识到在 viewController1 中做相反的事情更有意义,即
- (void) viewWillAppear:(BOOL)animated
{
[self.navigationController setNavigationBarHidden:YES animated:animated];
[super viewWillAppear:animated];
}
- (void) viewWillDisappear:(BOOL)animated
{
[self.navigationController setNavigationBarHidden:NO animated:animated];
[super viewWillDisappear:animated];
}
然后从 View Controller 2 和 3 中删除之前的代码。这解决了问题。
关于ios - 使用 UINavigationController 推送两个 View 后后退按钮消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9569570/