回答:
このリンクから:
self.navigationItem.backBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
タイラーがコメントで言ったように:
表示されているビューコントローラーではこれを行わないでください。ただし、戻るボタンを押した場合に表示されるビューコントローラーでは、
release
ありUIBarButtonItem
ます。
UIBarButtonItemStyleBordered
、プロパティの呼び出しに置き換えますself.navigationItem.backBarButtonItem.style
。ドキュメント:developer.apple.com/library/ios/documentation/uikit/reference/...
Interface Builderでテキストを設定できます。
戻るボタンが戻るViewControllerのナビゲーション項目を選択します。
ユーティリティパネルの属性インスペクタで、[戻る]ボタンのラベルを入力します。
私は、受け入れられた回答のようにコードでタイトルを設定するよりもこのアプローチを好みます。
また、スタックの1レベル上のView Controllerでこれを行う必要があることに注意してください。つまり、表示されているビューコントローラではこれを行わず、戻るボタンを押したときに表示されるビューコントローラでこれを行います。
-タイラー
私はこれを使います:
// In the current view controller, not the one that is one level up in the stack
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.navigationBar.backItem.title = @"Custom text";
}
次のように、別のコントローラーをスタックにプッシュする前にコントローラーのタイトルを設定するだけで、これに対する便利な解決策が見つかりました。
self.navigationItem.title = @"Replacement Title";
[self.navigationController pushViewController:newCtrl animated:YES];
次に、元のタイトルを次のように設定してviewWillAppear
ください。
-(void)viewWillAppear:(BOOL)animated
{
...
self.navigationItem.title = @"Original Title";
...
}
これUINavigationController
は、プッシュ操作中に戻るボタンを作成するときのデフォルトの動作が、前のコントローラーのタイトルを使用するためです。
戻るボタンのタイトルはデフォルトで前のビューのタイトルになっているので、私が使用する簡単なトリックは、次のコードを前のビューの.mファイルに配置することです。
-(void)viewWillAppear:(BOOL)animated {
// Set title
self.navigationItem.title=@"Original Title";
}
-(void)viewWillDisappear:(BOOL)animated {
// Set title
self.navigationItem.title=@"Back";
}
initメソッドに次のコードを追加します。
- (id)initWithStyle:(UITableViewStyle)style {
if(self = [super init]) {
//...
UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStylePlain
target:self
action:@selector(goBack)];
self.navigationItem.leftBarButtonItem = customBackButton;
[customBackButton release];
//...
}
return self;
}
次に、単純なメソッドを追加して、viewcontrollerを終了できるようにします。
-(void)goBack {
[self.navigationController popViewControllerAnimated:YES];
}
次のコードをviewDidLoadまたはloadViewに追加します。
self.navigationController.navigationBar.topItem.title = @"Custom text";
iOS 9を搭載したiPhoneおよびiPadでテストしました
navigationController
およびtopItem
プロパティのオプションのチェーンでした。例:self.navigationController?.navigationBar.topItem?.title = "Custom Text"
手綱の答えに追加します。Appleのドキュメントから、backBarButtonItemの宣言は次のとおりであることに注意してください。
@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem
したがって、合成されたセッターはretain
渡したインスタンスを明示的に解放されることはないため、手綱の答えはメモリをリークします。あなたはこれを使ってこれを修正することができますautorelease
self.navigationItem.backBarButtonItem =
[[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStyleBordered
target:nil
action:nil] autorelease]; //<-- autoreleased
または、インスタンスで変数をポイントして、後で明示的に解放できるようにすることもできます。
UIBarButtonItem* item = ...
self.navigationItem.backBarButtonItem = item;
[item release];
お役に立てれば!
面白いものを発見しました。をサブクラス化しUINavigationController
てpushViewController:animated:
メソッドをオーバーライドし、次のようなことを行った場合:(私はARCを使用していることに注意してください)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc]
initWithTitle: @"Back"
style: UIBarButtonItemStyleBordered
target: nil action: nil];
viewController.navigationItem.backBarButtonItem = backButton;
[super pushViewController:viewController animated:animated];
次にViewControllers
、ナビゲーションコントローラーで押されたものすべてに、自動的に「戻る」ボタンが表示されます。特定のView Controllerのテキストを変更したい場合は、試してみて、ViewControllerを特定のクラスまたは独自のカスタムプロトコルにキャストすることができます(ViewControllerが継承するメソッドは、backButtonText
できます入ってくるビューコントローラーに関する特定の情報。これにより、戻るボタンのテキストをカスタマイズできます。これで、戻るボタンのテキストは、責任を単独で負うべき場所で処理されます。テキストを変更するための新しいボタンを作成するのは面倒ですが、まあ。
誰もがこのようにしない理由を考えることができますか?少なくとも、ビューコントローラのタイトルをいじったり、ナビゲーションコントローラのビューコントローラを押す前に新しい戻るボタンを作成することを忘れたりする必要はありません。
オーブリーの提案を拡張して、これを子ビューコントローラーで行うことができます:
親のnavigationItem.titleと親のnavigationItemの古い値を格納するための2つの変数を作成します
UINavigationItem* oldItem;
NSString* oldTitle;
でviewDidLoad
、以下を追加します。
oldItem = self.navigationController.navigationBar.topItem;
oldTitle = oldItem.title;
[oldItem setTitle: @"Back"];
でviewWillDisappear
、以下を追加します。
[oldItem setTitle: oldTitle];
oldTitle = nil; // do this if you have retained oldTitle
oldItem = nil; // do this if you have retained oldItem
それは完璧ではありません。新しいコントローラーがアニメーション化されると、親ビューのタイトルが変更されます。しかし、これにより、戻るボタンにカスタムラベルを付け、標準の戻るボタンのような形に保つという目的が達成されます。
これをあなたviewDidLoad
に入れてください、あなたが探しているものになることを願っています
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close"
style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backBarButtonItem;
[backBarButtonItem release];
ARRIVINGコントローラでタイトルを設定する場合(場合によってはより多くのロジック..)Swift 3で:
func setBackButtonNavBar(title: String, delay: Double){
let when = DispatchTime.now() + delay
DispatchQueue.main.asyncAfter(deadline: when, execute: { () -> Void in
if let navBar = self.navigationController?.navigationBar{
navBar.backItem?.title = title
}
})
}
次のコントローラー:
override func viewDidLoad() {
super.viewDidLoad()
self.setBackButtonNavBar(title: "back", delay: 0.3)
}
通常、コントローラ拡張にself.setBackButtonNavBarを配置します。
コードでこれを行うと、の[戻る]ボタンのスタイルが削除されますUINavigationConroller
。各ビューにナビゲーションアイテムを追加すると、でバックボタンのタイトルを設定できますStoryBoard
。
self.navigationController.navigationBar.topItem.title = @"Custom text";