连续推送 ViewController 时缺少导航或后退按钮的标题

Missing Navigation's or Back Button's Title When Push ViewControllers in Succession

我在连续推送视图控制器时 UINavigationController 遇到问题。

有关信息,我使用 XCode 7.0,构建目标 iOS 8,以及模拟器 9.0 上的应用程序 运行。

这是用户手动点击表格视图的单元格时的视图:

如上图所示,导航和后退按钮的标题显示正常。

但是当我以编程方式执行此操作时,就像这样(stackUIViewController 的数组):

for controller in stack {
    self.mainNavController.pushViewController(controller, animated: false)
}

或者像这样使用 0.0 秒的延迟:

for controller in stack {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64((0.0 * Float(NSEC_PER_SEC)))), dispatch_get_main_queue(), {
        self.mainNavController.pushViewController(controller, animated: false)
    })
}

最终结果会这样显示(左边是w/o延迟,右边是w/延迟):

请注意左侧屏幕截图中缺少导航标题(w/o 延迟),右侧屏幕截图中缺少后退按钮标题(有延迟)。

这个问题困扰了我几天。知道为什么会这样吗?有谁知道如何解决这一问题?或者至少解决这个问题?

提前致谢。

这就是我过去所做的。您可能会发现它有帮助:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let myBackButton = UIBarButtonItem()
    myBackButton.title = "This is my back button"
    navigationItem.backBarButtonItem = myBackButton
}

发生这种情况是因为没有告知中间视图控制器加载,因此它无法正确加载内容,例如后退按钮的正确消息传递。对于任何中间视图控制器,调用 loadViewIfNeeded() 然后上层视图控制器可以从中获取所有需要的信息。