"Tombol kembali" secara UINavigationController
default menunjukkan judul tampilan terakhir di tumpukan. Apakah ada cara untuk memiliki teks khusus di tombol kembali?
"Tombol kembali" secara UINavigationController
default menunjukkan judul tampilan terakhir di tumpukan. Apakah ada cara untuk memiliki teks khusus di tombol kembali?
Jawaban:
Dari tautan ini :
self.navigationItem.backBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
Seperti yang dikatakan Tyler dalam komentar:
jangan lakukan ini di pengontrol tampilan yang terlihat, tetapi di pengontrol tampilan yang akan Anda lihat jika Anda menekan tombol kembali
release
yang UIBarButtonItem
.
UIBarButtonItemStyleBordered
dengan panggilan ke properti self.navigationItem.backBarButtonItem.style
. Dokumentasi: developer.apple.com/library/ios/documentation/uikit/reference/…
Anda dapat mengatur teks di Pembuat Antarmuka:
Pilih item navigasi pada ViewController yang akan dikembalikan oleh tombol kembali:
Di inspektur atribut panel utilitas, masukkan label Anda untuk Tombol Kembali:
Saya lebih suka pendekatan ini daripada menetapkan judul dalam kode seperti pada jawaban yang diterima.
Perhatikan juga, Anda perlu melakukan ini di view controller satu tingkat di atas tumpukan. Dengan kata lain, jangan lakukan ini di pengontrol tampilan yang terlihat, tetapi di pengontrol tampilan yang akan Anda lihat jika Anda menekan tombol kembali.
--Tyler
Saya menggunakan ini:
// In the current view controller, not the one that is one level up in the stack
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.navigationBar.backItem.title = @"Custom text";
}
Saya menemukan solusi praktis untuk ini dengan hanya mengatur judul controller sebelum mendorong controller lain ke stack, seperti ini:
self.navigationItem.title = @"Replacement Title";
[self.navigationController pushViewController:newCtrl animated:YES];
Kemudian, pastikan untuk mengatur judul aslinya viewWillAppear
, seperti ini:
-(void)viewWillAppear:(BOOL)animated
{
...
self.navigationItem.title = @"Original Title";
...
}
Ini berfungsi karena perilaku default UINavigationController
ketika membangun tombol kembali selama operasi push adalah dengan menggunakan judul dari pengontrol sebelumnya.
Judul tombol kembali secara default ke judul tampilan sebelumnya sehingga trik cepat yang saya gunakan adalah menempatkan kode berikut pada file .m tampilan sebelumnya.
-(void)viewWillAppear:(BOOL)animated {
// Set title
self.navigationItem.title=@"Original Title";
}
-(void)viewWillDisappear:(BOOL)animated {
// Set title
self.navigationItem.title=@"Back";
}
dalam metode init Anda, tambahkan kode berikut:
- (id)initWithStyle:(UITableViewStyle)style {
if(self = [super init]) {
//...
UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStylePlain
target:self
action:@selector(goBack)];
self.navigationItem.leftBarButtonItem = customBackButton;
[customBackButton release];
//...
}
return self;
}
kemudian tambahkan metode sederhana, untuk memungkinkan pemecatan viewcontroller:
-(void)goBack {
[self.navigationController popViewControllerAnimated:YES];
}
Tambahkan kode berikut di viewDidLoad atau loadView
self.navigationController.navigationBar.topItem.title = @"Custom text";
Saya mengujinya di iPhone dan iPad dengan iOS 9
navigationController
topItem
self.navigationController?.navigationBar.topItem?.title = "Custom Text"
Menambah jawaban rein. Perhatikan dari dokumen Apple bahwa deklarasi backBarButtonItem adalah ini:
@property(nonatomic, retain) UIBarButtonItem *backBarButtonItem
Oleh karena itu, jawaban rein akan membocorkan memori karena setter yang disintesis akan retain
membuat Anda lulus begitu saja, yang tidak pernah dirilis secara eksplisit. Anda dapat memperbaiki ini dengan menggunakanautorelease
self.navigationItem.backBarButtonItem =
[[[UIBarButtonItem alloc] initWithTitle:@"Custom Title"
style:UIBarButtonItemStyleBordered
target:nil
action:nil] autorelease]; //<-- autoreleased
Atau Anda bisa mengarahkan variabel pada instance sehingga Anda dapat secara eksplisit melepaskannya nanti:
UIBarButtonItem* item = ...
self.navigationItem.backBarButtonItem = item;
[item release];
Semoga ini membantu!
Saya telah menemukan sesuatu yang menarik. Jika Anda mensubclass UINavigationController
dan menimpa pushViewController:animated:
metode dan melakukan sesuatu seperti ini: (ingatlah bahwa saya menggunakan ARC)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc]
initWithTitle: @"Back"
style: UIBarButtonItemStyleBordered
target: nil action: nil];
viewController.navigationItem.backBarButtonItem = backButton;
[super pushViewController:viewController animated:animated];
Kemudian untuk semua ViewControllers
yang didorong dengan pengontrol navigasi Anda akan memiliki tombol "Kembali" di dalamnya secara otomatis. Jika Anda ingin mengubah teks untuk pengontrol tampilan tertentu, Anda dapat mencoba dan mungkin melemparkan viewcontroller ke kelas tertentu atau protokol kustom Anda sendiri (yang diturunkan dari viewcontroller Anda yang dapat memiliki metode seperti backButtonText
atau sesuatu yang konyol seperti itu) yang dapat memberi Anda informasi tertentu pada viewcontroller yang datang dengan begitu Anda dapat menyesuaikan teks tombol kembali untuk itu. Sekarang teks tombol kembali diurus di tempat yang seharusnya hanya memikul tanggung jawab. Saya harus mengakui bahwa membuat tombol baru untuk mengubah teks menyebalkan, tapi oh well.
Adakah yang bisa memikirkan alasan mengapa tidak melakukannya seperti ini? Setidaknya Anda tidak perlu mengutak-atik judul viewcontroller atau harus ingat untuk membuat tombol kembali baru sebelum mendorong viewcontroller pada pengontrol navigasi.
jawaban rein bekerja dengan baik.
Perhatikan bahwa jika Anda menekan lebih dari satu pengontrol tampilan, judul tombol kembali yang diubah akan muncul untuk masing-masing, yang mungkin bukan yang Anda inginkan.
Dalam hal ini, Anda harus membuat UIBarButtonItem khusus setiap kali Anda mendorong pengontrol tampilan.
Juga, pastikan Anda melakukannya sebelum mendorong pengontrol tampilan, jika tidak, Anda akan mendapatkan cegukan layar saat judul berubah.
Memperluas saran Aubrey, Anda bisa melakukan ini di pengontrol tampilan anak:
buat dua variabel untuk menyimpan nilai lama dari navigationItem.title orang tua dan navigationItem orang tua
UINavigationItem* oldItem;
NSString* oldTitle;
di viewDidLoad
, tambahkan berikut ini:
oldItem = self.navigationController.navigationBar.topItem;
oldTitle = oldItem.title;
[oldItem setTitle: @"Back"];
di viewWillDisappear
, tambahkan berikut ini:
[oldItem setTitle: oldTitle];
oldTitle = nil; // do this if you have retained oldTitle
oldItem = nil; // do this if you have retained oldItem
Itu tidak sempurna. Anda akan melihat judul perubahan tampilan induk saat controller baru dianimasikan. TETAPI ini memang mencapai tujuan untuk memberi label kustom pada tombol kembali dan menjaganya agar tetap berbentuk seperti tombol kembali standar.
Masukkan ini ke dalam diri Anda viewDidLoad
, berharap itu akan menghasilkan apa yang Anda cari
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close"
style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backBarButtonItem;
[backBarButtonItem release];
jika Anda ingin mengatur judul di ARRIVING controller (terkadang lebih banyak logika ..) di swift 3 lakukan:
func setBackButtonNavBar(title: String, delay: Double){
let when = DispatchTime.now() + delay
DispatchQueue.main.asyncAfter(deadline: when, execute: { () -> Void in
if let navBar = self.navigationController?.navigationBar{
navBar.backItem?.title = title
}
})
}
dalam controller mendatang:
override func viewDidLoad() {
super.viewDidLoad()
self.setBackButtonNavBar(title: "back", delay: 0.3)
}
biasanya saya meletakkan self.setBackButtonNavBar di ekstensi pengontrol.
Saya tahu ini adalah pertanyaan lama dan jawabannya sudah habis!
Cara mudah adalah dengan melakukan ini di induk ViewController:
yaitu salah satu yang membawa Anda ke pengontrol tampilan berikutnya.
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Custom text here", style: .plain, target: nil, action: nil)
Melakukan ini dalam kode menghapus gaya tombol kembali UINavigationConroller
. Jika Anda menambahkan Item Navigasi di setiap tampilan Anda, Anda dapat mengatur judul botton belakang di menu StoryBoard
.
self.navigationController.navigationBar.topItem.title = @"Custom text";