2016-08-21 73 views
0

我知道你可以從IB或prepareForSegue設置後退按鈕的標題,但在我的應用程序中,我需要根據控件可見時可能發生的事件更新標題。如何從子視圖控制器中更改後退按鈕文本?

我試過,但沒有任何反應:

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: title, style: .Plain, target: nil, action: nil)

這工作雖然但沒有後退箭頭:

self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: title, style: .Plain, target: nil, action: "popVC")

任何想法?

回答

1

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,而不是改變現有的稱號。

+0

但是正如我的嘔吐一樣,後推按鈕的標題可以在推B後改變。它應該像WhatsApp一樣工作,聊天視圖控制器中的後退按鈕會根據新到達的聊天消息的數量進行更新。我很好奇他們是如何設法做到的? – MJQZ1347

+0

我點擊發布錯誤...請參閱我的編輯 – deadbeef

+0

謝謝,試過了。它似乎工作,但只有在'B'已經被調用並再次運行之後。有沒有辦法刷新'navigationBar'? – MJQZ1347

0

試試這個:

let baritems = self.navigationController?.navigationBar.items 

     for item in baritems!{ 
      if (item.leftBarButtonItem != nil){ 
       item.title = "123" 
      } 
     } 
0

這個問題是很老了,但我改變基於嵌套tableViewController的所選單元格的後退按鈕文本的一個問題。

它看起來像navigationViewController的默認後退按鈕,它的文本基於它使用戶回到視圖控制器的標題。

你應該小心,因爲我的解決方案使得我不積極的一些假設永遠是真的。

let vcs = navigationController?.viewControllers 
vcs?[(vcs?.count)! - 2].navigationItem.title = "Your Text Here" 

假設我們當前的視圖控制器位於導航堆棧頂部 - > vcs [vcs。count - 1];在此之前,在該堆棧上存在一個視圖控制器 - > vcs [vcs.count - 2];並且前面的視圖控制器的navigationItem.title可以被改變而沒有不需要的副作用;我們可以通過更改前一個視圖控制器的導航標題來更改我們的後退按鈕文本。

相關問題