2011-03-17 64 views
2

嘿,我有一堆UIViewController s在UINavigationController之內。通常,標題(或NavigationItem的標題)決定導航欄(顯示在頂部)顯示的標題以及所有導航按鈕(例如導航欄本身的後退按鈕)。NavigationBar和導航按鈕中的單獨標題

現在我打算在NavigationBar的標題中加入更多信息,同時仍然保留這些按鈕標籤簡潔明快(例如,視圖的標題爲「<客戶名稱>概述」,而按鈕應該只是顯示「概述」)。

我目前正在試圖通過更改導航項的標題ViewWillAppearViewWillDisappear來實現此目的。這很好,但人們可以看到文本改變的時刻(可能是由於動畫)。我已經嘗試了ViewDidAppearViewDidDisappear的不同組合,但效果最好,只有Will方法。下面顯示了一個示例代碼(Example類被推送到UINavigationController)。

有沒有更好的方法來實現這一目標?也許只需更改按鈕標題或直接更改導航標題?或者我可以阻止標準機制將標題複製到所有其他實例?

public class Example : UIViewController 
{ 
    private int depth; 

    public Example (int depth = 0) 
    { 
     this.depth = depth; 
     this.Title = "Title"; 
    } 

    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     UIButton btn = new UIButton(new RectangleF(100, 100, 300, 50)); 
     btn.SetTitle("Duplicate me!", UIControlState.Normal); 
     btn.TouchDown += delegate(object sender, EventArgs e) { 
      NavigationController.PushViewController(new Example(depth + 1), true); 
     }; 
     View.Add(btn); 
    } 

    public override void ViewWillAppear (bool animated) 
    { 
     base.ViewWillAppear(animated); 
     this.NavigationItem.Title = String.Format("Title/{0}", depth); 
    } 

    public override void ViewWillDisappear (bool animated) 
    { 
     base.ViewWillDisappear(animated); 
     this.NavigationItem.Title = "Title"; 
    } 
} 

回答

4

如果我理解正確的話,我覺得有一個現成的這個:

集backBarButtonItem您的視圖控制器的導航項目。

+0

然而,這要求我在* next *視圖中設置按鈕標題;所以我不能在控制器內部更改視圖A的按鈕標題,但必須在每個視圖中執行它,因爲我可能會從A中導航到所有視圖。所以我需要更改每個可能的從屬視圖控制器來檢查父控制器並基於哪個父控制器來更新按鈕。 – poke 2011-03-17 14:11:57

+2

不,您在視圖控制器A上設置backBarButtonItem。「backBarButtonItem」定義瞭如果A是前一個視圖控制器,視圖控制器B將顯示哪個視圖。也許有點違反直覺,但是你去了。 – 2011-03-17 14:22:23

+0

哇,太好了。這真的起作用了!沒想到它能像那樣工作。非常感謝你! – poke 2011-03-17 14:29:05