Cara mengatur kembali teks tombol di Swift

207

Bagaimana Anda menghapus teks tombol kembali.

Tombol kembali saat ini:

<Kembali

Tombol kembali yang diinginkan:

<Apa sajaElse

Tidak ada yang berhasil:

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
Onichan
sumber

Jawaban:

604

Tombol kembali milik controller tampilan sebelumnya , bukan yang ditampilkan saat ini di layar.
Untuk memodifikasi tombol kembali Anda harus memperbaruinya sebelum mendorong, pada pengontrol tampilan yang memulai segue:

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
}

ATAU

// in your viewDidLoad or viewWillAppear
navigationItem.backBarButtonItem = UIBarButtonItem(
    title: "Something Else", style: .plain, target: nil, action: nil)
Yariv Nissim
sumber
9
Terima kasih banyak, Anda tidak tahu berapa jam yang saya habiskan hanya untuk detail kecil (controller sebelumnya)
Ricardo
3
Jika saya dapat memilih sebanyak satu juta kali saya akan. Tidak dapat memberi tahu Anda berapa lama saya menghabiskan waktu bertanya-tanya mengapa itu tidak bekerja (sebelumnya di pengontrol tujuan)
Dylan
13
"Tombol kembali milik controller tampilan sebelumnya" itu jawaban paling berharga yang saya temukan tentang topik ini! Terima kasih!
vhristoskov
1
Mengatur titleperubahan judul , bukan hanya tombol kembali.
Yariv Nissim
4
Saya menambahkan self.navigationController! .NavigationBar.topItem! .BackBarButtonItem = backItem alih-alih navigationItem.backBarButtonItem = backItem dan berfungsi dengan baik pada Swift 3. Terima kasih
Indra Adam
125

Anda dapat melakukannya dari pembangun antarmuka sebagai berikut:

klik pada item navigasi pengontrol tampilan sebelumnya

masukkan deskripsi gambar di sini

dari inspektur atribut atur teks tombol kembali ke apa pun yang Anda inginkan. Itu dia!!

masukkan deskripsi gambar di sini

Ajinkya Patil
sumber
1
apa cara terbaik untuk menetapkan 'nihil'?
kennydust
@kennydust Apakah maksud Anda judul kosong?
Ajinkya Patil
8
@kennyhust ya di tombol kembali tambahkan spasi dan tekan enter
Ajinkya Patil
Bagus dan mudah, tetapi apakah itu bisa dilokalisasi?
Gruntcakes
2
@AjinkyaPatil Saya mencoba ini tetapi tombol Kembali tidak muncul. Ada alasan mengapa ini bisa terjadi?
user805981
48

Teks tombol kembali diambil dari judul item navigasi pengontrol tampilan orang tua. Jadi, apa pun yang Anda atur pada judul item navigasi view-controller sebelumnya, akan ditampilkan pada teks tombol kembali controller tampilan saat ini. Anda hanya dapat menempatkan "" sebagai judul item navigasi dalam metode viewWillAppear kontrol orangtua.

self.navigationItem.title = ""

Cara lain adalah dengan meletakkan

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

dalam metode viewWillAppear view controller saat ini. Yang ini akan menyebabkan beberapa masalah lain jika tumpukan navigasi terlalu bersarang.

minhazur
sumber
5
self.navigationItem.title = "" harus di atas sebagai jawaban terbaik!
Rilar
Saya setuju dengan ini sebagai jawaban terbaik karena semua jawaban di atas memerlukan penambahan fungsi target ke item navigasi, jadi mereka tidak hanya mengubah teks tetapi mereka menambahkan fungsi pop kustom juga, yang tidak diperlukan oleh pertanyaan!
IsPha
Ini berfungsi dengan baik prepareForSegue, yaitu. sedikit lebih bersih karena Anda tidak mengubah viewController baru setelah dimuat.
Adrian
Perhatian!!! letakkan self.title = "....." sebelum pemanggilan ke self.navigationItem.title = ""
Bary Levy
45

Anda dapat menempatkan 3 baris kode ini di dalamViewController Anda ingin mengubah judul tombol kembali.

Di Anda override func viewDidLoad() {}.

let backButton = UIBarButtonItem()
backButton.title = "My Back Button Title"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
Hitesh Chauhan
sumber
2
Solusi ini tampaknya lebih benar, karena Anda menempatkan logika di VC yang tiba bukan VC yang Anda tinggalkan. Aka: membaca lebih baik.
eonist
37

Jika Anda menggunakan file xib untuk view controller maka lakukan ini di kelas view controller Anda.

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
}

}

Hasilnya adalah:

masukkan deskripsi gambar di sini

mustaq
sumber
29

Saya tidak tahu di mana Anda telah menggunakan metode Anda yang Anda masukkan pada pertanyaan Anda, tetapi saya bisa mendapatkan hasil yang diinginkan jika saya gunakan, di ViewControllerkelas saya (di mana saya ingin mengubah tombol kembali), pada viewDidLoad()fungsi, baris berikut:

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

Hasilnya adalah:

Sebelum

masukkan deskripsi gambar di sini

Setelah

masukkan deskripsi gambar di sini

Francisco Romero
sumber
3
Dalam kasus saya ini hanya berfungsi jika Anda menempatkan potongan kode ini pada metode viewDidAppear dan bukan pada viewDidLoad
apinho
2
Gunakan navigationController.navigationBar.topItem?.title = ""sebaliknya untuk menghindari memasukkan iniviewDidAppear
José
Ini tampaknya cara yang paling memuaskan dan menghindari flash karena judul tombol kembali diubah menjadi "" menggunakan self.navigationItem.title = "" pada pengontrol panggilan (perangkat yang lebih lambat). Juga situasi lain di mana self.navigationItem.title = "" sepenuhnya diabaikan sebentar-sebentar bertransisi dengan cepat ke pengontrol tampilan melalui pengalih tab pengontrol tab secara terprogram.
FlimFlam Vir
22

Tombol kembali milik controller tampilan sebelumnya, bukan yang ditampilkan saat ini di layar. Untuk memodifikasi tombol kembali Anda harus memperbaruinya sebelum mendorong, tambahkan viewdidload:

Swift 4:

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

Anda bisa memodifikasi NavigationItem di storyboard

masukkan deskripsi gambar di sini

Di Tombol Kembali tambahkan spasi dan tekan Enter.

Catatan: Lakukan ini di VC sebelumnya.

xinoda
sumber
8

Swift 4 - Konfigurasikan tombol kembali sebelum mendorong pengontrol tampilan apa pun

// 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)
budidino
sumber
8

Ini seharusnya bekerja:

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)
}

Meskipun tidak disarankan karena ini benar-benar menggantikan tombol Kembali dan juga menghapus panah kembali dan gerakan menggesek.

Dejan Skledar
sumber
10
bukan cara yang tepat untuk melakukannya, Anda hanya mengganti tombol kembali
Yariv Nissim
Lebih baik melakukannya dari pembangun antarmuka
Rutger Huijsmans
7

Cepat 4.2

Jika Anda ingin mengubah bilah navigasi kembali teks item tombol, letakkan ini di viewDidLoadcontroller SEBELUM satu di mana tombol kembali menunjukkan, BUKAN pada pengontrol tampilan di mana tombol kembali terlihat.

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

Jika Anda ingin mengubah teks judul bilah navigasi saat ini, gunakan kode di bawah ini (perhatikan bahwa ini menjadi teks kembali default untuk tampilan NEXT yang didorong ke pengontrol navigasi, tetapi teks balik default ini dapat diganti dengan kode di atas)

 self.title = "Navigation Bar Title"
ikbal
sumber
6

Ada dua cara.

1.In sebelumnyaViewController.viewDidLoad ()

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

2.Dalam currentViewController.viewDidAppear ()

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

Alasan: backButtonberasal dari navigationBar.backItem.backBarButtonItem, jadi cara pertama sudah jelas. Di currentViewController.viewDidLoad (), kita tidak bisa mendapatkan referensi backItem, karena di viewDidAppear (), navigationBardorongan navigationViewpada stack.so kita bisa membuat perubahan ke backItemdalam currentViewController. viewDidAppear ()

Untuk detail lebih lanjut, Anda dapat melihat Dokumen: UINavigationBar

Calcifer
sumber
3

Dalam viewDidLoadmetode pengontrol yang ada tambahkan:

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

Meskipun jawaban ini memperbaiki masalah tetapi ini bisa bermanfaat

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)

    }

}
Ahmad Labeeb
sumber
2

Cepat 4

Sementara pepatah sebelumnya untuk mempersiapkan segue benar dan benar tombol kembali milik VC sebelumnya, itu hanya menambahkan banyak kode yang tidak perlu.

Hal terbaik untuk dilakukan adalah mengatur judul VC saat ini di viewDidLoad dan secara otomatis akan mengatur judul tombol kembali dengan benar pada VC berikutnya. Baris ini bekerja untuk saya

navigationController?.navigationBar.topItem?.title = "Title"
Joel
sumber
2

Ini berfungsi untuk Swift 5 :

self.navigationItem.backBarButtonItem?.title = ""

Harap dicatat ini akan efektif untuk pengontrol tampilan terdorong berikutnya bukan yang sekarang pada tampilan, itu sebabnya sangat membingungkan!

Juga, periksa storyboard dan pilih item navigasi dari pengontrol tampilan sebelumnya kemudian ketik sesuatu di Tombol Kembali (Inspektur).

Saeed Ir
sumber
1

Coba ini ... ini akan berhasil ....

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

Kode di atas akan menyembunyikan teks dan hanya menampilkan panah kembali pada bilah navigasi.

Sarabjit Singh
sumber
0

Atur self.title = "" sebelumnya self.navigationController?.pushViewController(vc, animated: true).

米米米
sumber
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
}

Semoga ini bisa membantu !! #wift 3

Sathish Kumar Gurunathan
sumber
0

Jika Anda mendorong pengontrol tampilan dari halaman pengontrol tampilan halaman, Anda tidak dapat memperbarui judul tombol kembali pengontrol navigasi. Untuk mengatasi ini, buat delegasi kembali ke controller tampilan induk Anda (Anda mungkin juga dapat melintasi hierarki tampilan controller kembali ke induknya).

Selanjutnya, tombol Kembali memiliki batas karakter. Jika Anda melebihi batas karakter, sistem akan secara default menjadi "Kembali". Itu tidak akan terpotong untuk Anda. Sebagai contoh:

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

Cepat 4

Dalam kasus saya, solusinya adalah menghapus item navigasi Master View Controller sebelum pindah ke Child View Controller. Dan atur kembali jika ditampilkan lagi

MasterController

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

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

Dan ini adalah bagaimana saya menekan UIViewController dan menghapus item tombol bilah belakang di pengontrol anak:

MasterController

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

untuk Swift 4.2

let backItem = UIBarButtonItem()
backItem.title = ""
navigationItem.backBarButtonItem = backItem
Iryna Batvina
sumber
0

GOTCHA: Jika Anda mengalami masalah dengan salah satu dari banyak saran yang banyak berkilau bintang ini, pastikan Anda mendaftar UITableViewCellmasuk viewDidLoad(), bukan dariinit()

Womble
sumber
-1

Solusi diperiksa dan bekerja di Swift 5

Di bawah ini saya berikan beberapa solusi untuk kasus yang berbeda:

1. Hapus teks dari tombol kembali

Solusi terbaik untuk menghapus teks dari tombol kembali adalah dengan menambahkan viewDidLoad ():

navigationItem.backBarButtonItem = UIBarButtonItem()

2. Atur teks sendiri di tombol kembali

Jika Anda ingin mengatur judul Anda sendiri, lakukan dengan menetapkan judul backButton:

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

3. Tombol kembali kosong pada semua VC

Jika Anda ingin membuat gaya umum di seluruh aplikasi - agar hanya panah kembali tanpa teks, buat VC dasar untuk semua Pengontrol Tampilan Anda:

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

        navigationItem.backBarButtonItem = UIBarButtonItem()
    }
}

Solusi yang disajikan di atas memungkinkan Anda menyesuaikan tombol kembali di masa mendatang jika Anda ingin membuat pengecualian nanti, dengan menambahkan variabel tambahan dan menimpanya di ViewController tertentu, 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
    }
}
lukszar
sumber
-2

cepat 4

ada satu cara untuk mengubah teks di backButton secara terprogram dari viewController saat ini:

navigationController?.navigationBar.items![0].title = "some new text"
zslavman
sumber