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

时间:2015-10-28 09:26:36

标签: ios swift uinavigationcontroller pushviewcontroller

连续推送视图控制器时UINavigationController出现问题。

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

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

User manually push the controller by tapping on tableview's cell

如上面的屏幕截图所示,导航&后退按钮的标题正常呈现。

但是当我以编程方式执行此操作时,(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)
    })
}

它会显示最终结果(左边是没有延迟,右边是延迟):

enter image description here

请注意左侧屏幕截图中缺少的导航标题(没有延迟)和右侧屏幕截图中缺少后退按钮标题(带延迟)。

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

这是我过去所做的。您可能会觉得它很有帮助:

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

答案 1 :(得分:1)

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