UIViewController
があり、最初のView Controllerから2番目のView Controllerに移動しており、navigationcontroller
に表示されているボタンの名前を変更したいのですが…。
SecondViewController *secondController = [[SecondViewController alloc]
initWithNibName:nil
bundle:NULL];
[self.navigationController pushViewController:secondController animated:YES];
2番目のviewcontroller
で、navigationController
のボタンの名前を変更します。
ViewWillAppearでこれを書く
self.navigationItem.title = @"List View";
そして、ViewWilldisapperでこれを書きます
self.navigationItem.title = @"Back";
ストーリーボードがなくても機能します。
プログラムでこれを行う場合は、次のように実行できます。
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"Custom"
style:UIBarButtonItemStyleBordered
target:nil
action:nil];
[self.navigationItem setBackBarButtonItem:backItem];
let backItem = UIBarButtonItem(title: "Custom", style: .Bordered, target: nil, action: nil)
navigationItem.backBarButtonItem = backItem
ただし、Interface Builderを使用する場合は、戻るボタンを設定するUINavigationItemを選択し、属性インスペクターに移動して戻るボタンのタイトルを変更するだけです。
注:現在表示されているView Controllerではなく、戻るボタンをタップすると戻るView Controllerでこれを設定する必要があることを覚えておくことが重要です。
Interface BuilderまたはStoryboardingでそれを行う簡単な方法があります。親View Controllerで、Navigation Itemの「Back Button」属性を任意のタイトルに設定するだけです。以下に例を示します。
VillianのTavernビューには、親のナビゲーションコントローラー(Best Bars)の属性インスペクターで設定したように、戻るボタンのタイトルとして「戻る」があります。
スウィフト3:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let backItem = UIBarButtonItem()
backItem.title = "Back"
navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}
注:戻るボタンは、現在画面に表示されているものではなく、前のView Controllerに属します。戻るボタンを変更するには、セグエを開始したView Controllerでプッシュする前に更新する必要があります。
私の場合、次のようにメインスレッドでコードを実行するだけで機能しました。
dispatch_async(dispatch_get_main_queue(), ^(void) {
self.navigationController.navigationBar.backItem.title = @"Custom Title";
});
Swiftで解決策は非常に簡単だとわかりましたが、
ViewControllerAでViewControllerBに移動し、ViewControllerBで表示される戻るボタンの名前を変更する場合は、 ViewControllerA、
self.title = "BackButtonTitle"
それでおしまい。
注:-これにより、タイトルが変更されますViewControllerA
ビューコントローラーの[シミュレートされたメトリック]オプションが[推定]として選択されていないことが非常に重要です。
「なし」で試しましたが、すべて正しいです!
これは、titleView
のnavigationItem
を使用して実現できます。
Swift 3回答
•UINavigationItem
の拡張機能を次のように作成します
extension UINavigationItem {
func customTitle(title: String) {
let titleLabel = UILabel()
titleLabel.text = title
titleLabel.textColor = UIColor.white
titleLabel.textAlignment = .center
titleLabel.sizeToFit()
titleView = titleLabel
}
}
•コントローラーでviewDidLoad
を実行します
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
title = "Text For Back Button"
navigationItem.customTitle(title: "Title for your view controller")
}
このようにしてください:-
NSArray *viewControllerArr = [self.navigationController viewControllers];
// get index of the previous ViewContoller
long previousViewControllerIndex = [viewControllerArr indexOfObject:self] - 1;
UIViewController *previous;
if (previousViewControllerIndex >= 0) {
previous = [viewControllerArr objectAtIndex:previousViewControllerIndex];
previous.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
initWithTitle:@"Back"
style:UIBarButtonItemStylePlain
target:self
action:nil];
}
ストーリーボード参照を使用すると、View ControllerがInterface BuilderにNavigation Itemを表示しない場合があります。
ナビゲーションバーを手動でドラッグしても機能しません。ナビゲーションアイテムをドラッグする必要があります。
その後、戻るボタンのタイトルを設定できます。これは、ビューのタイトルを設定する場所でもあります。
ミック・マッカラムの引用:
注:現在表示されているView Controllerではなく、戻るボタンをタップすると戻るView Controllerでこれを設定する必要があることを覚えておくことが重要です。
以下のコードを試してください:
[self.navigationItem setValue:@[@"customTitle",@""] forKey:@"abbreviatedBackButtonTitles"];
実際には、戻るボタンのタイトルを変更できます。
self.navigationItem.backBarButtonItem.title = @"NewName";
これを行うには2つの方法があります。
最初の方法は、プログラムコードによるものです。
Yakimenko Alekseyの答えは最も簡単な方法です、これは本当に機能します(Xcode 8 + iOS 10でテスト済み)
Swift3:
self.navigationItem.backBarButtonItem?.title = "Your customized back title"
注:宛先View Controllerではなく、ソースView Controllerで上記のコードを呼び出す必要があります。
2番目の方法は、Main.strings
ファイル、
"nnnnnnn.title" = "localized string";
Nnnnnnnは、ソースビューコントローラー内のBackBarButtonItemのオブジェクトIDを意味します(宛先ビューコントローラーではありません!)
ナビゲーションバーアイテムの「戻る」プロパティを設定する必要があります。BarButtonItemが自動的に作成され、そのオブジェクトIDが見つかります。
申し訳ありませんが、スクリーンショットをアップロードできませんでした。
Storyboardを使用する場合、これを行う簡単な方法があります(私にとってはうまくいきました)。
私はViewController1にいて、ViewController2に行きます。ViewController2に表示される戻るボタンの名前を変更したい場合は、ViewController2でこれを行います。
Swift 5
self.navigationController?.navigationBar.topItem?.title = "BackButtonTitle"
Objective-C
self.navigationController.navigationBar.topItem.title = @"BackButtonTitle";
多くのナビゲーションコントローラーを備えたかなり複雑なストーリーボードがあり、顧客はすべての戻るボタンに「戻る」と言うことを望んでいました。
Interface Builderを使用して、すべてのUINavigationItemの[戻る]ボタンフィールドに「戻る」を入力しました。
シーンが変わるたびに働いていたわけではありません!
問題は、notストーリーボードのすべてのView ControllerにUINavigationItemがあったことです。
これを修正するには、新しいUINavigationItemを持たないすべてのUIViewControllerにドラッグアウトし、[戻る]ボタンフィールドのallを「Back」に設定します。
独自のUINavigationItemが自動的に与えられないコントローラーに注意してください。
スイフト4
IViewControllerで、これを設定します:
let backButton = UIBarButtonItem()
backButton.title = "[Your title here]"
self.navigationItem.backBarButtonItem = backButton