Bagaimana cara menyembunyikan tombol "kembali" di UINavigationController?

158

Apakah Anda tahu cara menyembunyikan tombol 'kembali' di UINavigationController? Juga, bagaimana menunjukkannya kembali, tapi saya rasa itu sangat mirip dengan menyembunyikannya ...

Sama seperti aplikasi email pada iPhone ketika Anda menekan 'Edit' saat melihat email.

Zoran Simic
sumber

Jawaban:

313

Saya baru saja menemukan jawabannya, di controller gunakan ini:

[self.navigationItem setHidesBackButton:YES animated:YES];

Dan untuk mengembalikannya:

[self.navigationItem setHidesBackButton:NO animated:YES];

-

[MEMPERBARUI]

Swift 3.0:

self.navigationItem.setHidesBackButton(true, animated:true)
Zoran Simic
sumber
18
Belajar juga dari kesalahan saya: Anda harus menelepon setHidesBackButton:SEBELUM Anda mendorong item navigasi ke dalam navigationController.
codingFriend1
kenapa sebelumnya? bagaimana dengan jika Anda ingin menekan viewController dan kemudian menyembunyikan tombol kembali untuk mencegah pengguna kembali?
user4951
1
@codingFriend - Saya menemukan bahwa ini juga berfungsi jika Anda meletakkan setHidesBackButton di penangan pesan viewDidAppear dari tampilan yang tidak ingin Anda tampilkan tombol backbutton aktif.
Anon
2
Peristiwa terbaik untuk ini adalah viewWillAppear:animatedmenyembunyikan dan viewWillDisappear:animatedmengembalikannya.
pechar
Akhirnya sesuatu yang tidak diubah Apple di Xcode. Lebih dari 5 tahun kemudian dan jawaban ini masih bagus.
App Dev Guy
27

Tambahkan Kode ini

[self.navigationItem setHidesBackButton:YES];
visakh7
sumber
22

Selain menghapus tombol kembali (menggunakan metode yang sudah disarankan), jangan lupa pengguna masih dapat 'pop' ke layar sebelumnya dengan gerakan gesek kiri-ke-kanan di iOS 7 dan yang lebih baru.

Untuk menonaktifkannya (bila perlu), terapkan yang berikut (dalam viewDidLoad misalnya):

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
     self.navigationController.interactivePopGestureRecognizer.enabled = NO;
mattv123
sumber
1
Matt - +1 untuk Anda. Terima kasih telah menambahkan catatan ini. Sangat berguna. Bagi siapa pun yang bertanya-tanya bagaimana gerakan pop bekerja, cukup geser dari kiri ke kanan pada bilah navigasi Anda untuk menciptakan kembali apa yang dijelaskan oleh Matt di sini. Menambahkan kode di atas mencegah pengguna melakukan ini pada pengontrol tampilan di mana ia disertakan.
noobzilla
18

Hanya untuk memperjelas jawaban yang ada: hidesBackButtonproperti adalah jawaban yang tepat, tetapi tidak jelas dalam banyak jawaban apa yang selfmerujuk. Pada dasarnya Anda harus mengatur self.navigationItem.hidesBackButton = YESpengontrol tampilan yang akan didorong (atau baru saja didorong) ke UINavigationController.

Dengan kata lain, katakan saya memiliki UINavigationControllernama myNavController. Saya ingin menempatkan pandangan baru di atasnya, dan ketika saya melakukannya saya tidak ingin tombol kembali ditampilkan. Saya bisa melakukan sesuatu seperti:

UIViewController *newVC = [[UIViewController alloc] init];
//presumably would do some stuff here to set up the new view controller
newVC.navigationItem.hidesBackButton = YES;
[myNavController pushViewController:newVC animated:YES];

Ketika kode selesai, tampilan yang dikontrol oleh newVCsekarang akan ditampilkan, dan tidak ada tombol kembali yang terlihat.

Mat
sumber
Persis seperti yang saya butuhkan saat pertama kali melakukan NavigationController.NavigationItem. Terima kasih, Matt.
Chucky
16

Untuk menyembunyikan dan menampilkan tombol Kembali secara kondisional, Anda dapat menggunakan kode berikut:

-(void)viewDidAppear:(BOOL)animated
{
    if ([tempAry count]==0)
    {
        [self.navigationItem setHidesBackButton:YES animated:YES];
    }
    else
    {
        [self.navigationItem setHidesBackButton:NO animated:YES];
    }
    [super viewDidAppear:animated];
} 

Catatan: dalam beberapa kasus, Anda harus memasukkannya ke dalam metode viewDidAppear alih-alih viewWillAppear seperti itu: ketika Anda memperbarui array kelas berikutnya ke kelas sebelumnya dan kemudian memeriksa kondisi ke kelas berikutnya seperti di atas.

Sandip Patel - SM
sumber
11

Swift iOS (Saya telah menggunakan yang berikut)

// hide back button
        self.navigationItem.setHidesBackButton(true, animated: false)

// pgrm mark ----- ------

    // hide the back button for this view controller

    override func setEditing(editing: Bool, animated: Bool) {
        super.setEditing(editing, animated: animated)

        self.navigationItem.setHidesBackButton(editing, animated: animated)

    }// end setEditing
Vinod Joshi
sumber
10

sethidesbackbutton tidak berfungsi untuk saya karena beberapa alasan

Saya menggunakan cara ini ->

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)]] ;
M.Othman
sumber
terima kasih .. Saya punya masalah yang sama di mana setHidesBackButton: YA tidak bekerja. tetapi solusi ini bekerja untuk iOS 7.
mohsinj
6

Dalam kasus saya, saya memiliki beberapa masalah dengan jawaban saat ini:

  • di dalam viewDidLoad / viewWillAppear hanya ikon kembali disembunyikan dan string "Kembali" tidak aktif tetapi masih terlihat
  • di dalam viewDidAppear tombol kembali menghilang ... tapi saya tidak ingin pengguna melihatnya sama sekali

Jadi solusi yang akhirnya berhasil bagi saya adalah:

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];

    if (self) {
        [self.navigationItem setHidesBackButton:YES animated:NO];
    }

    return self;
}
micromanc3r
sumber
3

Solusi yang disarankan oleh Zoran Simic tidak berhasil untuk saya karena suatu alasan.

Namun kode ini berfungsi:

MyController* controller   =   [[MyController alloc]  init];
NSArray* array             =   [[[NSArray alloc] initWithObjects:controller, nil] autorelease];

[self.navigationController setViewControllers:array animated:NO];

[controller release];

Jelas Anda harus memanipulasi NSArray sesuai selera Anda untuk membuatnya bekerja untuk Anda. Semoga itu bisa membantu seseorang :)

PowerAktar
sumber
Terima kasih untuk ini! Saya melawan bug aneh dan ini berhasil. Bukan untuk semua orang, tetapi berguna dalam kasus yang tepat.
Brandon
1

Dalam subkelas UIViewController saya, saya memiliki metode ini:

-(void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated: animated];

    // hide back button in edit mode
    [self.navigationItem setHidesBackButton:editing animated:YES];
}
neoneye
sumber
0

Ini menyembunyikan tombol kembali dan menggantinya dengan tombol add di Swift:

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    // This hides the back button while in editing mode, which makes room for an add item button
    self.navigationItem.setHidesBackButton(editing, animated: animated)

    if editing {
        // This adds the add item button
        let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
        // Use the animated setter for the left button so that add button fades in while the back button fades out
        self.navigationItem.setLeftBarButton(addButton, animated: animated)
        self.enableBackGesture(enabled: false)
    } else {
        // This removes the add item button
        self.navigationItem.setLeftBarButton(nil, animated: animated)
        self.enableBackGesture(enabled: true)
    }
}

func enableBackGesture(enabled: Bool) {
    // In addition to removing the back button and adding the add item button while in edit mode, the user can still exit to the previous screen with a left-to-right swipe gesture in iOS 7 and later. This code disables this action while in edit mode.
    if let navigationController = self.navigationController {
        if let interactivePopGestureRecognizer = navigationController.interactivePopGestureRecognizer {
            interactivePopGestureRecognizer.isEnabled = enabled
        }
    }
}
David Weiss
sumber
0

Cepat 3.

Secara umum, Anda harus menggunakan API per-ViewController Apple seperti yang telah dijelaskan berkali-kali di halaman ini, tetapi kadang-kadang Anda perlu segera mengendalikan tombol Kembali.

Kode berikut menyembunyikan tombol Kembali dan memastikan bahwa deteksi tabrakan ketukan tidak terjadi di wilayah tombol tersembunyi.

let emptyView = UIView(frame: .zero)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: emptyView)
Womble
sumber
0

Ini menyembunyikan tombol kembali

let backBtn = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: navigationController, action: nil)


navigationItem.leftBarButtonItem = backBtn
Zeeshan
sumber