2016-08-21 7 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を使用して構成されます。

あなたはこのようなものかもしれない:Bたら

A.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Go back to A", style: .Plain, target: nil, action: nil) 

を押すと、あなたは「戻ってAに戻る」バックボタンを参照してください。

あなたの場合、難しい部分は、Bからナビゲーションスタック内のAを見つけることです。 あなたはそのようなnavigationControllerviewControllersで検索することでそれを行うことができます。

// 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" 
} 

編集

私はその後、ナビゲーションバーをリフレッシュするために任意のクリーン方法を知りません。たぶん別の質問をするだけかもしれません。あなたは何ができるか
はポップで、既存のタイトルを変更するのではなく、新しいUIBarButtonItemを作成しようとするかもしれない

if let navigationController = self.navigationController { 
    navigationController.popViewControllerAnimated(false) 
    navigationController.pushViewController(self, animated: false) 
} 

アニメーション

せずにビューコントローラをプッシュしますか。

+0

しかし、私の城砦に描かれているように、Bボタンを押した後に戻るボタンのタイトルが変わることがあります。チャット・ビュー・コントローラーの戻るボタンが新しく到着したチャット・メッセージの数で更新されるWhatsAppのように動作するはずです。彼らがそれをどうやってどうやって管理したのか不思議です。 – MJQZ1347

+0

私は誤ってパブリッシュをクリックしました...私の編集を参照 – deadbeef

+0

ありがとう、それを試してみました。それはうまくいくようですが、 'B'がポップされてからもう一度opendした後でなければなりません。 '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。カウント - 1];この1つ前にスタック上にビューコントローラが存在する - > vcs [vcs.count - 2];その前のビューコントローラのnavigationItem.titleを不要な副作用なしに変更することができます。その直前のView Controllerのナビゲーションタイトルを変更して、戻るボタンのテキストを変更することができます。

関連する問題