UINavigationController'da “geri” düğmesi nasıl gizlenir?


158

Bir UINavigationController'da 'geri' düğmesini nasıl gizleyeceğinizi biliyor musunuz? Ayrıca, bunu nasıl göstereceğim, ama sanırım bu onu gizlemeye çok benziyor ...

E-postaları görüntülerken 'Düzenle'ye bastığınızda posta uygulamasının iPhone'da yaptığı gibi.

Yanıtlar:


313

Ben sadece cevabı öğrendim, bir denetleyici bunu kullanın:

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

Ve geri yüklemek için:

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

-

[GÜNCELLEME]

Swift 3.0:

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

18
Ayrıca benim hatamdan öğrenin: setHidesBackButton:navigationItem'i navigationController'a basmadan ÖNCE aramalısınız .
codingFriend1

neden önce? Bir viewController'a basmak ve sonra kullanıcının geri dönmesini önlemek için geri düğmesini gizlemek isterseniz ne olur?
user4951

1
@codingFriend - setHidesBackButton öğesini, backbuttonunu göstermek istemediğiniz görünümün viewDidAppear ileti işleyicisine koyarsanız bunun da işe yaradığını görüyorum.
Anon

2
Bunun için en iyi olaylar viewWillAppear:animated, gizlemek ve viewWillDisappear:animatedgeri yüklemektir.
pechar

Sonunda Apple'ın Xcode'da değişmediği bir şey. 5 yıldan fazla bir süre sonra ve bu cevap hala harika çalışıyor.
Uygulama Dev Guy

27

Bu Kodu Ekle

[self.navigationItem setHidesBackButton:YES];

22

Geri düğmesini kaldırmaya ek olarak (zaten önerilen yöntemleri kullanarak), kullanıcının iOS 7 ve sonraki sürümlerde soldan sağa hızlıca kaydırma hareketiyle önceki ekrana 'pop' yapabileceğini unutmayın.

Bunu devre dışı bırakmak için (uygun olduğunda) aşağıdakileri uygulayın (örneğin viewDidLoad'da):

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
     self.navigationController.interactivePopGestureRecognizer.enabled = NO;

1
Matt - Sizin için +1. Bu notu eklediğiniz için teşekkürler Çok kullanışlı. Pop hareketinin nasıl çalıştığını merak eden herkes için, Matt'in burada açıkladıklarını yeniden oluşturmak için gezinme çubuğunuzda soldan sağa doğru hızlıca kaydırın. Yukarıdaki kodu eklemek kullanıcının bunu dahil olduğu görünüm denetleyicisinde yapmasını engeller.
noobzilla

18

Sadece mevcut cevapları açıklığa kavuşturmak için: hidesBackButtonmülkiyet doğru cevaptır, ancak birçok cevapta neyi selfifade ettiği açık değildir . Temelde self.navigationItem.hidesBackButton = YESgörünüm denetleyicisine, üzerine itilmek (veya sadece itilmek) için ayarlamanız gerekir UINavigationController.

Başka bir deyişle, bir UINavigationControllerismim var diyelim myNavController. Üzerine yeni bir görünüm eklemek istiyorum ve bunu yaptığımda geri düğmesinin artık gösterilmesini istemiyorum. Gibi bir şey yapabilirdi:

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];

Kod bittiğinde, tarafından kontrol edilen görünüm newVCgösterilmeli ve hiçbir geri düğmesi görünmemelidir.


Tam olarak ne ben ilk NavigationController.NavigationItem yapıyor gibi gerekli. Teşekkürler Matt.
Chucky

16

Geri düğmesini koşullu olarak gizlemek ve göstermek için aşağıdaki kodu kullanabilirsiniz:

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

Not: bazı durumlarda, viewWillAppear yerine viewDidAppear yöntemine koymanız gerekir, örneğin: bir sonraki sınıfın dizisini önceki sınıfa güncellerken ve yukarıdaki gibi bir sonraki sınıfa koşul kontrol ederken.


11

Swift iOS (Aşağıdakileri kullandım)

// 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

10

sethidesbackbutton nedense benim için çalışmadı

Bu şekilde kullandım ->

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)]] ;

teşekkürler .. setHidesBackButton: EVET işe yaramadı aynı sorunu vardı. ancak bu çözüm iOS 7 için çalıştı.
mohsinj


6

Benim durumumda mevcut cevaplarla ilgili birkaç sorunum vardı:

  • viewDidLoad / viewWillAppear yalnızca arka simge gizlendi ve "Geri" dizesi etkin değil, ancak yine de görünür
  • Geri git düğmesi kayboldu ... ama kullanıcının hiç görmesini istemedim

Sonunda benim için çalışmış olan çözüm:

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

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

    return self;
}

3

Zoran Simic'in önerdiği çözüm bir nedenden dolayı benim için çalışmadı.

Ancak bu kod işe yaradı:

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

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

[controller release];

Açıkçası, bir NSArray'ı sizin için çalışması için zevkinize göre manipüle etmeniz gerekir. Umarım birine yardımcı olur :)


Bunun için teşekkürler! Garip bir böcekle savaşıyordum ve bu hile yaptı. Herkes için değil, doğru durumlarda yararlı.
Brandon

1

Benim UIViewController alt sınıf bu yöntemi var:

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

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

0

Bu, geri düğmesini gizler ve Swift'te bir ekle düğmesiyle değiştirir:

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

0

Hızlı 3.

Genel olarak, Apple'ın her ViewController API'sini bu sayfada zaten birçok kez açıklandığı gibi kullanmalısınız, ancak bazen Geri düğmesinin hemen kontrol edilmesi gerekir.

Aşağıdaki kod Geri düğmesini gizler ve dokunma çarpışma algılamasının gizli düğme bölgesinde gerçekleşmemesini sağlar.

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

0

Bu geri düğmesini gizler

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


navigationItem.leftBarButtonItem = backBtn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.