ナビゲーションバーの「戻る」ボタンのタイトルを変更する方法

iphone objective-c uinavigationbar uinavigationitem

現在の左バーボタンのデフォルト値は、現在のビューをロードしたビューのタイトル、つまりボタンが押されたときに表示されるビュー(戻るボタン)です。

ボタンに表示されるテキストを他のものに変更したいのですが。

次のコードをView ControllerのviewDidLoadメソッドに入れてみましたが、うまくいかないようです。

self.navigationItem.leftBarButtonItem.title = @ "ログアウト";

私は何をすべきか?

ありがとう。

  218  71


ベストアンサー

これは、 “NewTitle”というタイトルのViewControllerを呼び出すメソッドに配置する必要があります。 push文またはpopViewController文の直前にあります。

UIBarButtonItem * newBackButton = [[UIBarButtonItem割り当て] initWithTitle:@ "NewTitle"スタイル:UIBarButtonItemStyleBorderedターゲット:nilアクション:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton]
;
[newBackButton release]
;

338


ChildVCではこれは私のために働きました…​

self.navigationController.navigationBar.topItem.title = @ "戻る";

Swiftでも動作します。

self.navigationController!.navigationBar.topItem!.title = "戻る"

92


これは* backBarButtonItem *のドキュメントです。

このナビゲーション項目がスタックの一番上の項目のすぐ下にあるとき、ナビゲーションコントローラはこのナビゲーション項目からナビゲーションバーのための戻るボタンを導出する。 […​]戻るボタンにカスタムの画像またはタイトルを指定する場合は、代わりにこのプロパティにカスタムのバーボタン項目(カスタムのタイトルまたは画像を含む)を割り当てることができます。 “

View Controller A(* “parent” * View Controller):

self.title = @ "本当に長いタイトル"; UIBarButtonItem * backButton = [[UIBarButtonItem割り当て] initWithTitle:@ "Short"スタイル:UIBarButtonItemStyleBorderedターゲット:nilアクション:nil]; self.navigationItem.backBarButtonItem = backButton;

他のView Controller _B_がナビゲーションスタックの一番上にあり、_A_がそのすぐ下にある場合、_B_の戻るボタンのタイトルは “Short” _になります。

80


ストーリーボードを使用したXcode 4.5では、Backボタンの値を動的に変更する必要がない場合に最も簡単な解決策は、自分が割り当てられているView ControllerのNavigation Itemに関連付けられた「Back Button」フィールドを使用することです「戻る」ボタンに何か他のことを言わせたい。

例えば 下のスクリーンショットでは、[戻る]ボタンのタイトルとして[戻る]を持つように、押しているView Controllerの[戻る]ボタンが必要です。

画像:https://i.stack.imgur.com/PYNhB.png [ここに画像の説明を入力してください]

もちろん、戻るボタンで毎回少し違ったことを言う必要がある場合、これは機能しません…他の解決策はすべてここにあります。

56


私は知っている、質問は非常に古いですが、私は良い解決策を見つけました。

UIBarButtonItem * barButton = [[UIBarButtonItem alloc] init]; barButton.title = @ "カスタムタイトル"; self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

childViewから動作します。 iOS 7でテスト済み。

41


多分私はあまりにも単純化しすぎていますが、Appleのドキュメントからの言い回しは次のとおりです。

*カスタム*バーボタン項目がどちらのビューコントローラでも指定されていない場合は、*デフォルトの戻るボタン*が使用され、そのタイトルは前のビューコントローラのtitleプロパティの値に設定されますスタックの1つ下のレベルのコントローラ。 _

上記で正しいとマークされた解決策は、親コントローラからデフォルトのボタン項目を設定します。 それは正しい答えですが、新しいコントローラをNavigationControllerスタックにプッシュする直前に、UIViewControllerの `self.title`プロパティを変更することで問題を解決しています。

これは自動的に次のコントローラの戻るボタンのタイトルを更新します、そしてあなたがそれを `viewWillAppear`の中にあるべきものに戻す限り、私はこのメソッドがあまりにも多くの問題を引き起こすのを見ることができません。

25


Swift / iOS8では、以下がうまくいった。

let backButton = UIBarButtonItem(title: "戻るボタンのテキスト"、style:UIBarButtonItemStyle.Bordered、target:nil、action:nil);

self.navigationController.navigationBar.topItem.backBarButtonItem = backButton;

フェリペの答えから移植された。

18


これは私にとっては良い仕事です。 試してください:

self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@ "戻る"スタイル:UIBarButtonItemStylePlain target:nilアクション:nil];

18


わかりました、これは方法です。 View Controllerが “first”で、ボタンを押すなどして別のView Controllerを “second”に移動した場合 あなたはいくつかの仕事をする必要があります。 最初に、このように「2番目の」View ControllerのViewDidLoadメソッドでBarButtonItemを作成する必要があります。

UIBarButtonItem * btnBack = [[UIBarButtonItem alloc] initWithTitle:@ "戻る"スタイル:UIBarButtonItemStyleBorderedターゲット:selfアクション:@selector(OnClick_btnBack :)]; self.navigationItem.leftBarButtonItem = btnBack; [btnBackリリース];

それが終わったら、次のように同じ.mファイルに “btnBack”アクションのコードを書く必要があります。

 - (IBAction)OnClick_btnBack:(id)送信者{[self.navigationController popViewControllerAnimated:YES]; //[self.navigationController pushViewController:self.navigationController.parentViewController animated:YES]; }

それで全部です。

17


私は本当に長いタイトルの親View Controllerを持っていました。 この結果、戻るボタンのテキストが子View Controllerのタイトルに流れ込んでいました。

さまざまな解決策を試した後、これが私がやることになったものです(@ john.k.doeアプローチを拡張)。

Xcode 7.2、Swift 2を使用する

  1. ストーリーボードで、*ナビゲーションアイテム*を*親*ビューコントローラのシーンに追加します(子のVCではありません)。

    https://i.stack.imgur.com/XIAp5.png[image:https://i.stack.imgur.com/XIAp5.png[navigation item]]
  1. 新しい Navigation Item`の Attributes Inspector`で、 Back Button`フィールドに space`文字を入力してください。 これについては後で詳しく説明します。

    https://i.stack.imgur.com/4sDLH.png[image:https://i.stack.imgur.com/4sDLH.png[階層表示]のナビゲーション項目]]
    https://i.stack.imgur.com/RRGJZ.png[image:https://i.stack.imgur.com/RRGJZ.png[戻るボタン]フィールドにスペースを追加する]]]
  1. * Parent *ビューコントローラに次のコードを追加します。

抜粋:

override func prepareForSegue(segue:UIStoryboardSegue、sender:AnyObject?){switch segue.destinationViewController {caseはChildViewControllerです:navigationItem.backBarButtonItem?.title = ""デフォルト:navigationItem.backBarButtonItem?.title = "フル親タイトル"}}

説明:

戻るボタンの種類は、親View Controllerに属します。 `Navigation Item`は戻るボタンへのハンドルをあなたに与えるので、あなたはコードまたはストーリーボードでタイトルを設定することができます。

注意:

Navigation Item`の Back Button`テキストをデフォルトの空の文字列のままにしておくと、戻るボタンのタイトルは “戻る”になります。

他の方法でうまくいく、なぜこれを使うのか?:

子View Controllerで戻るボタンのタイトルをオーバーライドすることは可能ですが、画面上ですでに少しの間点滅するまでそれを処理するのは困難でした。

いくつかのアプローチは新しい戻るボタンを構築して既存のものを上書きします。 私はそれがうまくいくと確信しており、そしていくつかのユースケースではおそらく必要です。 しかし私は可能な限り既存のAPIを活用することを好みます。

いくつかの状況では、親View Controllerの title`を変更するのが最も早い解決策です。 ただし、これは親のタイトルを変更するため、状態を管理する必要があります。 `Tab Bar Controller`でもタイトルが変更されると Tab Bar Item`タイトルに副作用が生じるので面倒になります。

15


タイトルとURLをコピーしました