【问题标题】:Back button disappears after pushing two views using UINavigationController使用 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 声明看起来如何?他们确定保留吗? (尤其是根 - 因为那似乎是迷路了)

标签: ios xcode uinavigationcontroller push back


【解决方案1】:

我找到了解决方案 - 在 vi​​ewController2 和 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 中删除之前的代码。这解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    相关资源
    最近更新 更多