プログラムによるナビゲーションタイトルの変更


188

タイトル付きのナビゲーションバーがあります。テキストをダブルクリックして名前を変更すると、実際にはナビゲーションアイテムであると表示されます。

次のようなコードを使用してテキストを変更しようとしています:

declare navigation bar as navagationbar here
button stuff {
    navigationbar.text = "title"
}

それは明らかに私のコードではなく、それがどのように機能するかを示すだけです。

そのため、ボタンを押すたびにタイトルを変更します。

回答:


539

タイトルを変更するには、表示されているビューコントローラーのタイトルを変更します。

viewController.title = "some title"

通常、これはビューコントローラでロードされたビューで行われます。

override func viewDidLoad() {
    super.viewDidLoad()
    self.title = "some title"
}

ただし、これはUINavigationControllerに埋め込まれたビューコントローラーがある場合にのみ機能します。自分でナビゲーションバーを作成する代わりに、これを行うことを強くお勧めします。ナビゲーションバーを自分で作成したい場合は、次のようにしてタイトルを変更できます。

navigationBar.topItem.title = "some title"

1
ViewController.typeには、titleという名前のメンバーがありません。それは私が得るエラーです。
2014

2
クラスで直接呼び出すことはありません。UIViewControllerのサブクラスのインスタンスでそれを呼び出します
drewag

はい、ViewControllerクラス自体を指します。あなたはを参照する必要があるインスタンスViewController。などのクラスのメソッド内からviewDidLoad、を使用して行うことができますself。クラスとインスタンスの違いがわからない場合は、それを理解することを強くお勧めします。この記事が役立ちます。
drewag 2014

Xcodeのチャームのようにも機能します。わずかな変更-> self.title = @ "some title";
2015年

self.title = "some title"がうまくいきました。ありがとうございました !'navigationController?.navigationItem.title = "Some title"を試しました。なぜうまくいかないのか本当にわかりません。(そこには、ナビゲーションコントローラーが埋め込まれているだけでなく、タイトルを表示するために配置したナビゲーションアイテムもあります)。私はそれでもうまくいくと思いますが、理由はわかりません。スタックオーバーフローで再び救助に!
Naishta 2016年

68

以下を試してください viewDidLoad

self.navigationItem.title = "Your Title"

1
私のために働きなさい。iOS 11.4
Antony Wong

13

以下のコードはXcode 7で動作します。

override func viewDidLoad() {        
    super.viewDidLoad()
    self.navigationItem.title = "Your Title"
}

10

私はこれが機能することを発見しました:

navigationItem.title = "Title"

UINavigationControllerの子であるビューコントローラーでタイトルをどのように中央揃えしますか?何らかの理由で、テキストが左揃えになります。 var customTitle = self.navigationController?.visibleViewController?.navigationItem customTitle?.title = "Some Title"
Bibcy 2017年

5

また、Navigation Bar手動で作成しようとすると、このコードが役立ちます

func setNavBarToTheView() {
    let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 64.0))
    self.view.addSubview(navBar);
    let navItem = UINavigationItem(title: "Camera");
    let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.cancel, target: self, action: #selector(CameraViewController.onClickBack));
    navItem.leftBarButtonItem = doneItem;
    navBar.setItems([navItem], animated: true);
}

4

通常、ベストプラクティスはにタイトルを設定することUIViewControllerです。これにより、UINavigationItemも設定されます。一般的に、これはUINavigationBar、何にもリンクされていないをプログラムで割り当てて初期化するよりも優れています。

UINavigationBarが設計された利点と機能の一部を逃しています。ここにあなたを助けるかもしれないドキュメントへのリンクがあります。実際のバーと上で設定できるさまざまなプロパティについて説明しますUINavigationItem

覚えておいてください:

  1. 戻るボタンの機能を失う(自分で配線しない限り)
  2. 組み込みの「左側からドラッグして後ろにスワイプする」ジェスチャーは無効になります

UINavigationControllerさんはあなたの友達です。


4

使用する人々のための正しい答え だろう

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "Your Text"
}

3

スウィフト3

ストーリーボードに(オブジェクトブラウザーからの)ナビゲーションバーに付属するナビゲーションタイトルバーアイテムのアウトレットを作成しました。それから私は以下の行を訴えました:

navigationBarTitleItem.title = "Hello Bar"

2

ナビゲーションコントローラーに埋め込まれているページビューコントローラーの子ビューコントローラーからタイトルを変更する場合は、次のようになります。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.parent?.title = "some title"
}

1

あなたが下のNavigationControllerシーの中に埋め込まれている場合TabBarController

super.tabBarController?.title = "foobar"

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

このような問題は、デバッガスクリプトを使用してデバッグできます。階層のすべての表示/非表示ビューを印刷するために、チゼルの pvcコマンドを試してください。


0

Swift 4の場合:

スウィフト4

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Your title"
}

よろしくお願いいたします。


2
これは受け入れられた答えのちょうど半分です。また、何も変わっていないと言うなら、なぜ何かを投稿するのですか?削除してください。
エリックアヤ

@モリッツはあなたがモデレーターかそのようなものですか?はいと言った場合は削除し、そうでない場合は削除しません。
ラダメスE.ヘルナンデス

1
あなたは本当にそれを言う?、私の上に完全に等しい4つの答えがあります、それでなぜあなたは私と一緒に来て、私に私を消すように言うのですか?私はコミュニティをサポートする信頼できるユーザーです。答えを繰り返すだけではありません。私はこの質問を更新された迅速なバージョンで更新したかっただけです。
Radames E. Hernandez 2018

3
回答は更新されていません。これは、一部...「これはやったロードビューで行われ、通常、」受け入れ答え、同じコードである
エリック綾

0

タブバーもタイトルの変更に使用するため、ナビゲーションバーでタイトルを提供するよりも使用self.navigationItem.title = "Your Title Here"するself.title = "Your Title Here"ことを好みますself.title。次のコードを1回試す必要があります。

注:何かを行う前に、スーパービューのライフサイクルを呼び出す必要があります。

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        setupNavBar()
    }
}

private func setupNavBar() {
    self.navigationItem.title = "Your Title Here"
}


0

Swift 5.1

//プログラムおよび動的にNavigationBarタイトルを設定します

注: 最初にNavigationControllerItemをYourに追加してからViewControllerViewController.swiftファイルに移動し、これをコピーして貼り付けviewDidLoad()ます。

navigationItem.title = "Your Title Here"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.