Swiftで戻るボタンのテキストを設定する方法


207

戻るボタンのテキストを削除するにはどうすればよいですか。

現在の戻るボタン:

<戻る

必要な戻るボタン:

<その他

これらのどれもうまくいきませんでした:

self.navigationItem.backBarButtonItem?.title = "Back"
self.backItem?.title = ""
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationItem.backBarButtonItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title="Back"
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title

回答:


604

戻るボタンは、現在画面に表示されているものではなく、前のビューコントローラに属しています。
戻るボタンを変更するには、プッシュするにセグエを開始したビューコントローラーで更新する必要があります。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Something Else"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

Swift 3、4、5:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Something Else"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

または

// in your viewDidLoad or viewWillAppear
navigationItem.backBarButtonItem = UIBarButtonItem(
    title: "Something Else", style: .plain, target: nil, action: nil)

9
どうもありがとう、あなたは私だけでは小さなディテール(以前のコントローラ)のために費やす何時間かわからない
リカルド

3
100万回賛成できるとしたら、なぜ機能しなかったのか(以前は宛先コントローラーでした)と思ったのにどれだけの時間を費やしたのかわかりません
Dylan Ireland

13
「戻るボタンは以前のビューコントローラーに属しています」これは、このトピックについて私が見つけた最も価値のある答えです。ありがとうございました!
vhristoskov 16

1
設定をtitle変更すると、戻るボタンだけでなくタイトルも変更されます。
Yariv Nissim 2017

4
NavigationItem.backBarButtonItem = backItemの代わりにself.navigationController!.navigationBar.topItem!.backBarButtonItem = backItemを追加しました。Swift3では正常に動作します。ありがとう
Indra Adam

125

次のように、インターフェイスビルダーから実行できます。

前のView Controllerのナビゲーションアイテムをクリックします

ここに画像の説明を入力してください

属性インスペクタから、戻るボタンのテキストを好きなように設定します。それでおしまい!!

ここに画像の説明を入力してください


1
「nil」を割り当てる最良の方法は何ですか?
kennydust

@kennydust空白のタイトルですか?
Ajinkya Patil 2016

8
@kennydustはい、戻るボタンでスペースを追加してEnterキーを押します
Ajinkya Patil

素敵で簡単ですが、ローカライズ可能ですか?
Gruntcakes

2
@AjinkyaPatil私はこれを試しましたが、[戻る]ボタンが表示されません。これがなぜであるかもしれない何らかの理由?
user805981 2016年

48

戻るボタンのテキストは、親のビューコントローラーのナビゲーションアイテムのタイトルから取得されます。したがって、前のビューコントローラーのナビゲーション項目のタイトルで設定したものはすべて、現在のビューコントローラーの戻るボタンのテキストに表示されます。親のビューコントローラーのviewWillAppearメソッドでナビゲーション項目のタイトルとして ""を置くだけです。

self.navigationItem.title = ""

別の方法は置くことです

self.navigationController?.navigationBar.topItem?.title = ""

現在のビューコントローラーのviewWillAppearメソッド。ナビゲーションスタックが入れ子になっている場合、これにより他の問題が発生します。


5
self.navigationItem.title = ""が一番良い答えです。
rilar

上記のすべての回答ではナビゲーション項目にターゲット関数を追加する必要があるため、ベスト回答はこれに同意します。したがって、テキストを変更するだけでなく、質問で必要とされないカスタムポップ機能も追加します。
IsPha

これはで正常に機能しますprepareForSegue。ロード後に新しいviewControllerを変更しないため、少しすっきりします。
エイドリアン

注意を払う!!!self.navigationItem.title = ""への呼び出しの前にself.title = "....."を配置します
Bary Levy

45

この3行のコードViewController、戻るボタンのタイトルを変更する場所に配置できます。

あなたのoverride func viewDidLoad() {}

let backButton = UIBarButtonItem()
backButton.title = "My Back Button Title"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

2
このソリューションは、ロジックを到着するVCに残しているのでなく、到着するVCに配置するので、より正確に思えます。AKA:読みやすくなります。
eonist

37

ビューコントローラーにxibファイルを使用している場合は、ビューコントローラークラスでこれを行います。

class AboutUsViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    edgesForExtendedLayout = []
    setUpNavBar()
}

func setUpNavBar(){
    //For title in navigation bar
    self.navigationController?.view.backgroundColor = UIColor.white
    self.navigationController?.view.tintColor = UIColor.orange
    self.navigationItem.title = "About Us"

    //For back button in navigation bar
    let backButton = UIBarButtonItem()
    backButton.title = "Back"
    self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
}

}

結果は次のようになります。

ここに画像の説明を入力してください


29

あなたがあなたの質問に入れたあなたのメソッドをどこで使用したかはわかりませんが、私がViewControllerクラスで(戻るボタンを変更したい)、viewDidLoad()関数で、次の行を使用すると、望ましい結果が得られます:

self.navigationController?.navigationBar.backItem?.title = "Anything Else"

結果は次のようになります。

ここに画像の説明を入力してください

ここに画像の説明を入力してください


3
私の場合、viewDidLoadのコードではなく、viewDidAppearメソッドにこのコードを配置した場合にのみ機能しました
apinho

2
使用navigationController.navigationBar.topItem?.title = ""中にこれを入れて回避するために、代わりにviewDidAppear
ホセ・

これは最も満足できる方法のようで、呼び出し側コントローラー(遅いデバイス)で[戻る]ボタンのタイトルが ""を使用してself.navigationItem.title = ""に変更されるため、フラッシュが回避されます。また、self.navigationItem.title = ""である他の状況は、プログラムによってタブコントローラーのタブスイッチを介して断続的にすばやくビューコントローラーに移行することで完全に無視されます。
FlimFlam Vir

22

戻るボタンは、現在画面に表示されているものではなく、前のビューコントローラに属しています。戻るボタンを変更するには、プッシュする前に更新する必要があります。viewdidloadを追加します。

スウィフト4:

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)

12

ストーリーボードのNavigationItemを変更するだけです

ここに画像の説明を入力してください

[戻る]ボタンでスペースを追加し、Enterキーを押します。

注:前のVCでこれを行ってください。


8

Swift 4-ビューコントローラーを押す前に戻るボタンを設定する

// if you want to remove the text
navigationItem.backBarButtonItem = UIBarButtonItem()

// if you want to modify the text to "back"
navigationItem.backBarButtonItem = UIBarButtonItem(title: "back", style: .plain, target: nil, action: nil)

8

これはうまくいくはずです:

override func viewDidLoad() {
    super.viewDidLoad()

    var button = UIBarButtonItem(title: "YourTitle", style: UIBarButtonItemStyle.Bordered, target: self, action: "goBack")
    self.navigationItem.backBarButtonItem = button

}

func goBack()
{
    self.navigationController?.popViewControllerAnimated(true)
}

これは実際にはbackButtonを置き換え、戻る矢印とスワイプジェスチャーも削除されたため、お勧めできません。


10
正しい方法ではなく、単に[戻る]ボタンを置き換えるだけです
Yariv Nissim '29

インターフェースビルダーから行う方が良い
Rutger Huijsmans

7

Swift 4.2

ナビゲーションバーの戻るボタンアイテムのテキストを変更する場合viewDidLoadは、戻るボタンが表示されているビューコントローラーではなく、戻るボタンが表示されるテキストの前にこれをコントローラーに挿入します。

 let backButton = UIBarButtonItem()
 backButton.title = "New Back Button Text"
 self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

現在のナビゲーションバーのタイトルテキストを変更する場合は、以下のコードを使用します(これは、ナビゲーションコントローラーにプッシュされるNEXTビューのデフォルトのバックテキストになりますが、このデフォルトのバックテキストは上記のコードでオーバーライドできます)。

 self.title = "Navigation Bar Title"

6

2つの方法があります。

1. previousViewController.viewDidLoad()で

let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"
navigationItem.backBarButtonItem = backBarBtnItem

2. currentViewController.viewDidAppear()で

let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"      
navigationController?.navigationBar.backItem?.backBarButtonItem = backBarBtnItem

理由:backButtonから来てnavigationBar.backItem.backBarButtonItem最初の方法はobvious.In currentViewController.viewDidLoad()であるので、我々はの参照を取得することはできません、backItem、)viewDidAppearで(ので、navigationBarプッシュnavigationViewその上でstack、我々はを変更することができ.soのbackItemでcurrentViewControllerを。 viewDidAppear()

詳細については、Document:UINavigationBarを参照してください


3

viewDidLoadの方法提示コントローラの追加:

// hide navigation bar title in the next controller
let backButton = UIBarButtonItem(title: "", style:.Plain, target: nil, action: nil)
navigationItem.backBarButtonItem = backButton

2

これらの答えは問題を解決しますが、これはいくつかの役に立つかもしれません

class MainNavigatioController: UINavigationController {

    override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        // first
        let backItem = UIBarButtonItem()
        backItem.title = "رجوع"
        self.viewControllers.last?.navigationItem.backBarButtonItem = backItem
        // then
        super.pushViewController(viewController, animated: animated)

    }

}

2

スウィフト4

セグエの準備をするという以前の発言は正しく、その真の戻るボタンは以前のVCに属していますが、それだけで不要なコードがさらに追加されています。

最善の方法は、viewDidLoadで現在のVCのタイトルを設定することです。これにより、次のVCで自動的に[戻る]ボタンのタイトルが正しく設定されます。このラインは私のために働いた

navigationController?.navigationBar.topItem?.title = "Title"

2

これはSwift 5で機能します:

self.navigationItem.backBarButtonItem?.title = ""

これは、ディスプレイ上の現在のビューコントローラーではなく、次にプッシュされたビューコントローラーに対して有効になるため、非常に混乱することに注意してください。

また、ストーリーボードを確認して、前のビューコントローラーのナビゲーション項目を選択し、[ 戻る]ボタン(インスペクター)に何かを入力します。


1

これを試してください...それはうまくいきます...

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    self.title = ""
}

上記のコードはテキストを非表示にし、ナビゲーションバーの戻る矢印のみを表示します。


0

self.title = "" 前に設定しself.navigationController?.pushViewController(vc, animated: true)ます。


0
override func viewWillAppear(_ animated: Bool) {

    self.tabBarController?.navigationItem.title = "Notes"

    let sendButton = UIBarButtonItem(title: "New", style: .plain, target: self, action: #selector(goToNoteEditorViewController))

    self.tabBarController?.navigationItem.rightBarButtonItem = sendButton
}

func goToNoteEditorViewController(){
   // action what you want
}

それが役に立てば幸い!!#swift 3


0

ページビューコントローラーページからビューコントローラーをプッシュしている場合、ナビゲーションコントローラーの戻るボタンのタイトルを更新できません。これを解決するには、親のビューコントローラーにデリゲートを作成し直します(ビューコントローラーの階層をトラバースして親に戻ることもできます)。

さらに、戻るボタンには文字制限があります。この文字制限を超えると、システムはデフォルトで「戻る」になります。切り捨てられません。例えば:

backItem.title = "Birthdays/Anniversaries" // Get's converted to "Back".
backItem.title = "Birthdays/Anniversa…" // Fits and shows as is.

0

スウィフト4

私の場合、解決策は、子ビューコントローラーに移動する前に、マスタービューコントローラーのナビゲーション項目をクリアすることでした。再表示されたら再設定

マスターコントローラー

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationItem.title = "Master Title"
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationItem.title = ""
}

これは、UIViewControllerをプッシュして子コントローラーのバックバーボタン項目をクリアする方法です。

マスターコントローラー

let childController = ChildController(collectionViewLayout: UICollectionViewFlowLayout())
childController.navigationItem.backBarButtonItem?.title = ""
navigationController?.pushViewController(childController, animated: true)


0

GOTCHA:スター数の多い提案のいずれかで問題が発生した場合は、からUITableViewCellviewDidLoad()はなくにを登録していることを確認してくださいinit()


-1

ソリューションがチェックされ、Swift 5で動作する

以下に、さまざまなケースに対するいくつかの解決策を示します。

1. [戻る]ボタンからテキストを削除する

戻るボタンからテキストを削除する最善の解決策は、viewDidLoad()に追加することです。

navigationItem.backBarButtonItem = UIBarButtonItem()

2.戻るボタンに独自のテキストを設定する

独自のタイトルを設定したい場合は、backButtonのタイトルを設定してください。

let backButton = UIBarButtonItem()
backButton.title = "My Title"
navigationItem.backBarButtonItem = backItem

3.すべてのVCの空の戻るボタン

アプリ全体で共通のスタイルを作成する場合-テキストなしで矢印だけを戻すには、すべてのView ControllerのベースVCを作成します。

class BaseViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.backBarButtonItem = UIBarButtonItem()
    }
}

上記のソリューションでは、変数を追加して特定のViewController、f.exでオーバーライドすることにより、後で例外を設定する場合に、[戻る]ボタンをカスタマイズできます。

class BaseViewController: UIViewController {

    var customBackButtonTitle: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        var backButton = UIBarButtonItem()
        if let text = customBackButtonTitle {
            backButton.title = text
        }
        navigationItem.backBarButtonItem = backButton
    }
}

-2

迅速4

現在のviewControllerからプログラムでbackButtonのテキストを変更する方法の1つがあります:

navigationController?.navigationBar.items![0].title = "some new text"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.