backBarButtonItem
是用於導航堆棧中的下一個控制器的後退按鈕的項目。
因此,例如,如果您的導航控制器的根視圖控制器爲A
,並且您按下了viewController B
,那麼您看到的一次B
的後退按鈕標題使用A
配置。
你可能有這樣的事情:
A.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Go back to A", style: .Plain, target: nil, action: nil)
一旦B
推,你看到一個返回「按鈕返回到A」。
在你的情況下,棘手的部分是從B
導航棧中找到A
。 您可以通過在navigationController
像這樣的viewControllers
搜索做到這一點:
// This code works from the `B` view controller
let viewControllers = self.navigationController?.viewControllers ?? []
if let indexOfCurrent = viewControllers.indexOf(self) where (indexOfCurrent > viewControllers.startIndex) {
let indexOfPrevious = indexOfCurrent.advancedBy(-1)
let previousViewController = viewControllers[indexOfPrevious]
previousViewController.navigationItem.backBarButtonItem?.title = "New Title"
}
編輯
我不知道任何乾淨方式刷新後的導航欄。也許你可以爲此提出一個單獨的問題。
你可以做的是流行和推視圖控制器沒有動畫
if let navigationController = self.navigationController {
navigationController.popViewControllerAnimated(false)
navigationController.pushViewController(self, animated: false)
}
或者,也許嘗試創建一個新的UIBarButtonItem
,而不是改變現有的稱號。
但是正如我的嘔吐一樣,後推按鈕的標題可以在推B後改變。它應該像WhatsApp一樣工作,聊天視圖控制器中的後退按鈕會根據新到達的聊天消息的數量進行更新。我很好奇他們是如何設法做到的? – MJQZ1347
我點擊發布錯誤...請參閱我的編輯 – deadbeef
謝謝,試過了。它似乎工作,但只有在'B'已經被調用並再次運行之後。有沒有辦法刷新'navigationBar'? – MJQZ1347