Bagaimana mengubah teks pada tombol kembali

90

Secara default tombol kembali digunakan sebagai teks di atasnya judul viewcontroller. Dapatkah saya mengubah teks di tombol kembali tanpa mengubah judul pengontrol tampilan? Saya memerlukan ini karena saya memiliki pengontrol tampilan yang judulnya terlalu panjang untuk ditampilkan dan dalam hal ini saya hanya ingin menampilkan "Kembali" sebagai keterangan untuk tombol kembali.

Saya mencoba yang berikut ini yang tidak berhasil:

self.navigationItem.leftBarButtonItem.title = @"Back";

Terima kasih.

Ilya Suzdalnitski
sumber
3
Ingatlah bahwa tombol belakang memiliki judul karena suatu alasan. Dengan mengubah judul menjadi "Kembali" Anda merampok informasi pengguna tentang ke mana tombol itu kembali.
Simon

Jawaban:

167

Mencoba

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

Saya menemukannya dengan melihat dokumen backBarButtonItem di dokumen Apple untuk UINavigationItem .

Marc W.
sumber
1
Maaf, saya tidak memiliki kesempatan untuk mengujinya sekarang, tetapi apakah ini menerapkan bentuk runcing kiri dari tombol Kembali bawaan, atau apakah bentuk persegi panjang default UIBarButtonItem tetap?
Marco
Saya sebenarnya tidak yakin. Saya berasumsi bahwa itu hanya akan mempertahankan bentuk tombol kembali secara otomatis karena Anda menyetel properti backButton, tetapi Anda harus mengujinya untuk mengetahuinya. Saya juga penasaran.
Marc W
2
Ya, berhasil! Itu ya mengubah judul, dan ya, menyimpan bentuknya. Terima kasih telah membantu.
Ilya Suzdalnitski
1
Catatan: tombol kembali dipertahankan dua kali [1x dari alokasi, 1x dari pertahankan properti]. Namun, jika Anda tidak mengubah tombol kembali, ini secara efektif tidak berbahaya.
Kelvin
29
Lihat komentar Marco di bawah - Anda harus memanggil ini pada pengontrol yang akan mendorong sesuatu yang baru, bukan pada pengontrol yang didorong.
Tagihan
97

Pendekatan Marc W bekerja dengan baik setelah saya menemukan pengontrol mana yang akan diterapkan: yang diberi judul ulang, bukan yang di atas. Jadi jika ini adalah tumpukan navigasi:

(bottom)  ControllerA -> ControllerB  (top)

... dan Anda ingin memberikan judul yang lebih pendek untuk ControllerA di tombol kembali yang ditampilkan saat ControllerB berada di atas , Anda menerapkan perubahan properti ke ControllerA .

Jadi lebih dalam konteks self.title, tidak seperti penyetel tombol bilah kiri / kanan lainnya.

Marco
sumber
13
Ini adalah detail yang sangat penting.
Tagihan
4
wcochran, ini berfungsi dengan storyboard, pastikan Anda menyetel Tombol Kembali dari pengontrol induk. Jadi jika Anda memiliki pengontrol A yang mengarah ke pengontrol B (melalui alur storyboard), daripada untuk menyesuaikan teks untuk tombol Kembali di pengontrol B, Anda harus menyetel properti "Tombol Kembali" untuk pengontrol A di editor storyboard.
menyela
Terima kasih Marco. Apa yang saya rasakan tentang pertanyaan ini adalah bahwa semua orang mencoba menjawab (dan menjawab dengan benar) tetapi tidak untuk pertanyaan yang diajukan. Anda pada dasarnya memukul paku di kepala dan dengan benar. Terima kasih untuk itu!
theiOSguy
1 untuk detail penting. Jawaban di atas tidak akan berhasil untuk Anda kecuali Anda memahami jawaban INI.
baptzmoffire
Anda benar, keyboard di MacBook One baru agak sulit untuk digunakan.
Mason G.Zhwiti
48

Anda bisa melakukannya di storyboard. Temukan pengontrol tampilan yang ingin Anda kembalikan (yang memiliki judul panjang), pilih Item Navigasi, dan buka Attributes Inspector (Alt + Cmd + 4), masukkan judul Tombol Kembali kustom.

masukkan deskripsi gambar di sini

alyoka
sumber
Inilah yang saya butuhkan karena saya ingin semua tombol kembali memiliki Teks "Kembali", bukan judul navigasi pengontrol sebelumnya.
Dave
8
Sekadar catatan, teks tombol kembali diatur pada tampilan tempat pengontrol berikutnya didorong, bukan pengontrol tampilan yang saat ini Anda tunjukkan.
Darbio
Ini adalah solusi sederhana yang bagus, tetapi tolong jangan mengganti nama semua tombol kembali Anda menjadi "Kembali", ini bertentangan dengan HIG Apple dan mengalahkan sebagian dari tujuan tombol kembali. :(
Samuel Goodwin
Bekerja dengan baik. Pastikan untuk MENYIMPAN file Storyboard. Upaya pertama saya tidak berhasil karena saya tidak melihat Storyboard belum disimpan! Dan ya, Anda mengubah tombol KEMBALI pada pengontrol tampilan tempat Anda berasal!
EricWas Diambil
Baiklah, tapi bagaimana jika saya ingin meninggalkan hanya panah, tanpa teks apapun? :)
Iurii Vasylenko
40

Terima kasih Marco ... itu membantuku ...

Inilah yang saya lakukan.

Jika Anda menggunakan tableView untuk menavigasi ke tampilan berbeda ... letakkan kode:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

Dalam didSelectRowAtIndexPathmetode Anda ... Pengontrol pertama ... Pengontrol A.

Saat Anda menavigasi ke Pengontrol B tombol akan memiliki judul "Kembali".

Ben Call
sumber
1
Terima kasih sayang @Ben. Itulah yang saya cari :).
Arslan
12

Tombol kembali menarik teksnya dari judul pengontrol tampilan induk.

Di pengontrol tampilan orang tua (pengontrol tampilan yang muncul saat Anda mengetuk tombol kembali), atur judulnya sendiri sebagai teks yang diinginkan pada tombol kembali.

Misalnya, kita punya RootViewControllerkelas. Saat kita mengklik sel dalam tampilan tabelnya, kita mendorong sebuah instance SecondViewController. Kami ingin tombol kembali dari SecondViewControllerinstance tersebut bertuliskan, "Beranda".

dalam viewDidLoadmetode RootViewController.m :

self.title = @"Home";

dalam viewDidLoadmetode SecondViewController.m :

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];    

Jika Anda ingin tombol kembali bertuliskan, "Kembali", setel judul pengontrol tampilan induk ke @"Back";

Rose Perrone
sumber
10

Ini bekerja lebih baik untuk saya. Coba:

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
Felipe FMMobile
sumber
1
Jawaban yang bagus bekerja dengan sempurna. itu harus ditandai sebagai dikecualikan.
Muhammad Rizwan
9

Jika Anda menggunakan storyboard:

  1. Buka StoryBoard
  2. Di jendela Document Outline, temukan ViewController tujuan Anda ingin kembali
  3. Klik Item Navigasi dari ViewController itu
  4. Di Attributes explorer, ubah nilai Tombol Kembali ke ubin kustom Anda

Itu dia, selamat menikmati ...

AntonijoDev
sumber
5

Dan di MonoTouch, pekerjaan berikut (di ViewDidLoad dari pengontrol induk):

NavigationItem.BackBarButtonItem = new UIBarButtonItem( "Back", UIBarButtonItemStyle.Plain, null);
BillF
sumber
3
[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc]
  initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]];

Ini berhasil untuk saya.

pengguna1004911
sumber
3

Di pengontrol tampilan orang tua Anda, setel tombol kembali saat tampilan dimuat:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    self.navigationItem.backBarButtonItem = 
       [[UIBarButtonItem alloc] initWithTitle:@"title" 
                                        style:UIBarButtonItemStylePlain 
                                       target:nil 
                                       action:nil];

}

Perhatikan bahwa kami tidak perlu menyertakan autoreleasedi bagian akhir dengan versi iOS terbaru.

Semoga ini membantu!

Zorayr
sumber
1

[self.navigationController.navigationBar.backItem setTitle:@"back"];

Ini bekerja untuk saya. Anda dapat mengganti "kembali" dengan yang lain.

ohmer
sumber
Saat menjawab dengan kode, selalu jelaskan apa masalah dengan kode yang diberikan dan bagaimana kode Anda memperbaiki masalah tersebut.
Lukas Knuth
1

Yang ini berhasil untuk saya jika Anda tidak ingin memiliki gelar!

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
gpichler.dll
sumber
1
self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
pengguna2783798
sumber
0

Saya akhirnya tahu mengapa jawaban ini tidak berhasil untuk saya pada awalnya. Saya menetapkan judul di storyboard. Ketika saya mengatur judul pada kode. berhasil!

self.navigationItem.title = @"Main Menu";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStyleBordered target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];
pengguna2547667
sumber
Di masa mendatang Anda mungkin ingin membuat postingan seperti ini sebagai komentar pada jawaban yang tidak berhasil untuk Anda.
Keith Smiley
0

Solusi saya adalah menetapkan judul ketika pengontrol tampilan didorong ke tumpukan navigasi dan mengatur ulang dengan menggunakan metode delegasi sebelum mendorong vc menutup:

Jadi saya menempatkan perubahan judul dalam memanggil pengontrol tampilan ketika saya mendorong pengontrol tampilan lain seperti:

self.pushedVC = [self.storyboard instantiateViewControllerWithIdentifier:@"pushedVCIdentifier"];
self.pushedVC.delegate = self;   
[self.navigationController pushViewController:self.pushedVC animated:YES];
self.title = @"Back";

dan dalam fungsi panggilan balik delegasi (yang saya panggil di viewWillDissapear):

-(void)pushedVCWillClose:(PushedVC *)sender
{
    self.title = @"Previous Title";
}
Despotovic
sumber
0

Jika Anda tidak hanya ingin mengubah teks tombol Kembali dan tetap menjadi bentuk panah kiri asli, tetapi juga ingin melakukan sesuatu saat pengguna mengklik tombol Kembali, saya sarankan Anda untuk melihat-lihat " CustomNavigationController " saya.

jianpx
sumber
0

// Anda dapat mencapai ini dengan mengatur judul di pengontrol tampilan sebelumnya seperti yang ditunjukkan di bawah ini

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for this view
        self.navigationItem.title = "My Title"

}

override func viewWillDisappear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for back button in next view 
        self.navigationItem.title = "Back"
}
John Carto
sumber
0

Untuk mengubah judul tombol kembali, lihat kode di bawah ini

InformationVC *infoController=[[InformationVC alloc]init];[self.navigationController infoController animated:YES];

//Below code changed back button title on InformationVC page.
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Information" style: UIBarButtonItemStylePlain target: nil action: nil];
self.navigationItem.backBarButtonItem = backBarButton;`enter code here`
Kiran K
sumber
0

Di Swift5, backBarButtom tidak dapat diedit. Oleh karena itu, kita perlu menyembunyikan backBarButtom terlebih dahulu, kemudian menggunakan leftbarButtom yang disesuaikan untuk menggantikan backBarButtom. Berikut adalah solusi terperinci: https://stackoverflow.com/a/63868300/13939003

Michael Lin Liu
sumber
-1

Ini berhasil untuk saya:

self.navigationController.navigationBar.topItem.title = "Back"
Rocky
sumber