Mengubah judul navigasi secara terprogram

188

Saya memiliki bilah navigasi dengan judul. Ketika saya mengklik dua kali teks untuk mengganti nama, itu sebenarnya mengatakan itu adalah item navigasi, jadi mungkin itu.

Saya mencoba mengubah teks menggunakan kode, seperti:

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

Jelas itu bukan kode saya, hanya menunjukkan cara kerjanya.

Jadi, setiap kali saya menekan tombol, saya ingin judul berubah.

Kenaikan
sumber

Jawaban:

539

Anda mengubah judul dengan mengubah judul pengontrol tampilan yang ditampilkan:

viewController.title = "some title"

Biasanya ini dilakukan dalam pandangan apakah memuat pada pengontrol tampilan:

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

Namun, ini hanya berfungsi jika Anda memiliki pengontrol tampilan tertanam di UINavigationController. Saya sangat merekomendasikan melakukan ini daripada membuat sendiri bilah navigasi. Jika Anda bersikeras membuat sendiri bilah navigasi, Anda dapat mengubah judul dengan melakukan:

navigationBar.topItem.title = "some title"
drewag
sumber
1
ViewController.type tidak memiliki judul anggota bernama. Itulah kesalahan yang saya dapatkan.
Meningkat
2
Anda tidak menyebutnya langsung di kelas. Anda menyebutnya pada turunan dari subkelas UIViewController
drewag
Ya, ViewControllermerujuk pada kelas itu sendiri. Anda perlu merujuk ke instance dari ViewController. Dari dalam metode di kelas Anda, seperti viewDidLoad, Anda dapat melakukannya menggunakan self. Jika Anda tidak tahu perbedaan antara kelas dan contoh, saya sangat menyarankan Anda mempelajari apa itu. Artikel ini akan membantu.
drewag
Bekerja seperti pesona di Xcode juga .. hanya perubahan kecil -> self.title = @ "some title";
Abstrak
self.title = "some title" bekerja untuk saya. Terima kasih ! Saya telah mencoba 'navigationController? .NavigationItem.title = "Beberapa judul". benar-benar tidak yakin mengapa itu tidak berhasil. (Saya punya item navigasi di sana, yang saya tempatkan untuk menampilkan judul, selain pengontrol navigasi tertanam). Saya masih berpikir itu harus berhasil, tetapi tidak tahu mengapa. Stack overflow untuk menyelamatkan sekali lagi!
Naishta
68

Coba yang berikut ini viewDidLoad

self.navigationItem.title = "Your Title"
Avi
sumber
1
Bekerja untukku. iOS 11.4
Antony Wong
13

Kode di bawah ini berfungsi untuk saya dengan Xcode 7:

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

Saya menemukan ini berfungsi:

navigationItem.title = "Title"
AJ9
sumber
Bagaimana Anda memusatkan judul di pengontrol tampilan yang merupakan anak dari UINavigationController? Untuk beberapa alasan teks disejajarkan ke kiri. var customTitle = self.navigationController?.visibleViewController?.navigationItem customTitle?.title = "Some Title"
bibscy
5

dan juga jika Anda akan mencoba membuat Navigation Barsecara manual kode ini akan membantu Anda

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);
}
Aleksey Timoshchenko
sumber
4

Biasanya, praktik terbaik adalah mengatur judul pada UIViewController. Dengan melakukan ini, UINavigationItemini juga diatur. Secara umum, ini lebih baik daripada secara program mengalokasikan dan menginisialisasi UINavigationBaryang tidak terkait dengan apa pun.

Anda melewatkan beberapa manfaat dan fungsionalitas yang UINavigationBardirancang untuk itu. Berikut ini tautan ke dokumentasi yang dapat membantu Anda. Ini membahas berbagai properti yang dapat Anda atur pada bilah aktual dan pada a UINavigationItem.

Perlu diingat:

  1. Anda kehilangan fungsi tombol kembali (kecuali jika Anda mengirim sendiri)
  2. Gerakan "seret dari sisi kiri ke geser ke belakang" bawaan dibatalkan

UINavigationControlleradalah teman kamu

kode darah
sumber
4

Jawaban yang benar untuk orang yang menggunakan akan menjadi

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

Cepat 3

Saya membuat saluran keluar untuk item bilah judul navigasi yang datang dengan bilah navigasi (dari Browser Objek) di storyboard. Lalu saya menggugat baris di bawah ini:

navigationBarTitleItem.title = "Hello Bar"
nyxee
sumber
2

Jika Anda ingin mengubah judul dari pengontrol tampilan anak dari Pengontrol Tampilan Halaman yang tertanam dalam pengontrol navigasi, akan terlihat seperti ini:

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

Jika Anda memiliki bagian NavigationControllerdalam yang tertanam di TabBarControllerbawah ini:

super.tabBarController?.title = "foobar"

masukkan deskripsi gambar di sini

Anda dapat men-debug masalah seperti ini dengan skrip debugger. Coba perintah Pahat pvc untuk mencetak setiap tampilan yang terlihat / tersembunyi pada hierarki.

RustyMagnet
sumber
0

Dalam Swift 4:

Cepat 4

override func viewDidLoad() {
    super.viewDidLoad()

    self.title = "Your title"
}

Saya harap ini membantu, salam!

Radames E. Hernandez
sumber
2
Ini hanya setengah dari jawaban yang diterima. Juga, jika Anda mengatakan bahwa tidak ada yang berubah, lalu mengapa Anda memposting sesuatu ?! Tolong hapus.
Eric Aya
@ Moritz apakah Anda moderator atau semacamnya? jika berkata Ya, saya akan menghapusnya, jika tidak saya tidak akan menghapusnya.
Radames E. Hernandez
1
Anda benar-benar mengatakannya?, Di atas saya ada 4 jawaban yang sepenuhnya sama, lalu mengapa Anda ikut dengan saya dan menyuruh saya untuk menghapus jawaban saya? Saya adalah pengguna tepercaya yang mendukung komunitas, saya tidak berkeliling hanya mengulangi jawaban. Saya hanya ingin memperbarui pertanyaan ini dengan versi cepat swift.
Radames E. Hernandez
3
Tidak ada yang diperbarui dalam jawaban Anda. Ini adalah kode yang sama dengan jawaban yang diterima, bagian "Biasanya ini dilakukan dalam pandangan memang memuat" ...
Eric Aya
0

Saya lebih suka menggunakan self.navigationItem.title = "Your Title Here"lebih self.title = "Your Title Here"untuk memberikan judul di bilah navigasi karena bilah tab juga digunakan self.titleuntuk mengubah judulnya. Anda harus mencoba kode berikut satu kali.

Catatan: memanggil siklus tampilan super diperlukan sebelum Anda melakukan sesuatu.

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

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

Cepat 5.1

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "What ever you want"
}
Marlhex
sumber
0

Cepat 5.1

// Tetapkan NavigationBar Judul Secara Programatis dan Dinamis

Catatan: Pertama-tama tambahkan NavigationControllerItem ke Anda ViewControllerkemudian goto ViewController.swiftfile mereka dan Just Copy and Paste ini di viewDidLoad().

navigationItem.title = "Your Title Here"

Raksha.
sumber