使用 UINavigationController 推送两个视图后后退按钮消失
Posted
技术标签:
【中文标题】使用 UINavigationController 推送两个视图后后退按钮消失【英文标题】:Back button disappears after pushing two views using UINavigationController 【发布时间】:2012-03-05 15:46:42 【问题描述】:我目前正在使用 UINavigationController 开发应用程序。我将根视图控制器设置为 ViewController1,然后推送 ViewController2 和 ViewController3 以响应按钮单击事件。
如果我随后单击视图 3 中的后退按钮,我将返回到视图 2,但此视图没有后退按钮。同样有趣的是,为每个视图设置了标题(分别为“视图 1”、“视图 2”和“视图 3”),如果我使用后退按钮从视图 3 导航回视图 2,标题将变为“视图 1' 即初始视图(视图 1)的标题 - 不是视图 2 的标题。
如果有人知道这里可能发生了什么,非常感谢您的建议。
非常感谢!
编辑:我使用以下代码在应用委托中初始化 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;
我稍后在按钮点击时将视图控制器推送到 UINavigationController,如下所示:
MyAppDelegate *appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
[self.navigationController pushViewController:appDelegate.viewController2 animated:YES];
【问题讨论】:
你能贴一些代码吗?另外,“从 3 导航到 2”是指使用后退按钮吗?还是您使用其他方法? 嗨 Damo - 是的,我使用后退按钮从 3 导航到 2。我编辑了我的原始帖子以包含我用于推送视图控制器的代码。谢谢。 那么在 viewController 对象中你是否设置了一个左侧导航栏按钮项 - 比如 - self.navigationItem.backBarButtonItem = summat?您说有一个后退按钮,但它似乎消失了 - 对吗? 不,我现在让 UINavigationController 处理这个。如果我从根视图控制器 (viewController1) 移动到 viewController2,那么视图 2 上会显示一个后退按钮。如果我从 viewController2 移动到 viewController3,那么视图 3 上也会显示一个后退按钮。只有当我使用后退按钮时视图 3 返回到后退按钮未显示的视图 2(在视图 2 上)。 出于兴趣 - 这些视图控制器的 @propertrty 声明看起来如何?他们确定保留吗? (尤其是根 - 因为那似乎是迷路了) 【参考方案1】:我找到了解决方案 - 在 viewController2 和 viewController3 中,我使用以下代码来隐藏导航栏(我希望导航栏隐藏在 view1 上,然后在视图 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];
然后从视图控制器 2 和 3 中删除之前的代码。这解决了问题。
【讨论】:
以上是关于使用 UINavigationController 推送两个视图后后退按钮消失的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationcontroller 中未使用的视图会发生啥?
使用 push segue 时 UINavigationController 是不是强制
UINavigationController - 使用 UIBlurEffect 清除背景
一起使用 UITabBarController 和 UINavigationController