Come nascondere il pulsante 'Indietro' sulla barra di navigazione su iPhone?


315

Ho aggiunto un controllo di navigazione per passare da una visualizzazione all'altra della mia app. Ma alcune delle visualizzazioni non dovrebbero avere il pulsante 'Indietro' (il titolo precedente). Qualche idea su come nascondere il pulsante Indietro?

Risposte:


812

Objective-C:
self.navigationItem.hidesBackButton = YES;

Swift:
navigationItem.hidesBackButton = true


@ user8170 come nascondere il barbuttonitem sinistro sulla barra di navigazione ..?
rockey,

9
non puoi nascondere il pulsante indietro self.navigationItem.leftBarButtonItem = nil;. Se hai impostato esplicitamente leftbarbuttonitem puoi usarlo self.navigationItem.leftBarButtonItem = nil;. self.navigationItem.hidesBackButton = YES;nasconde il pulsante Indietro Item
rakeshNS

1
In iOS 7, self.navigationItem.leftBarButtonItem = nil; non influisce sul pulsante Indietro quando viene emesso da viewDidLoad, viewWillAppear o viewDidAppear. Questa riga di codice funziona all'interno di viewdidLoad: self.navigationItem.hidesBackButton = YES;
Alex Zavatone,

2
non sono sicuro che ciò aiuti, ma "self" è sempre un controller di visualizzazione che viene presentato in cima allo stack del controller di navigazione.
Kunal Balani,

self.navigationItem.hidesBackButton = YES; funziona per me in viewDidLoad, iOS 7
Leukosaima,

38

Il modo migliore è combinarli, in modo da nascondere il pulsante Indietro anche se impostato manualmente:

self.navigationItem.leftBarButtonItem=nil;
self.navigationItem.hidesBackButton=YES;

6
Per rispondere a user716216, lo ha spiegato nella sua spiegazione di una frase. La seconda riga di codice è ciò che funziona per il caso predefinito. La prima riga di codice funziona se hai creato e aggiunto tu stesso il pulsante.
Alex Zavatone,

21

pulsante indietro con codice a soffietto ...

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

o

[self.navigationItem setHidesBackButton:YES];

Anche se hai personalizzato, UINavigationBarprova a sotto il codice

self.navigationItem.leftBarButtonItem = nil;

in qualsiasi classe quando hai usato quel codice, il pulsante Indietro della barra di navigazione di quella classe si nasconderà ...
Paras Joshi,

6

In Swift :

Aggiungi questo al controller

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.setHidesBackButton(true, animated: false)
}


3

Nella funzione viewDidLoad di UIViewController usa il codice:

self.navigationItem.hidesBackButton = YES;

2

Non dimenticare che è necessario chiamarlo sull'oggetto che ha il controller di navigazione. Ad esempio, se si dispone di un controller di navigazione che spinge su un controller della barra delle schede con un RootViewController, la chiamata self.navigationItem.hidesBackButton = YESal RootViewController non farà nulla. Dovresti davvero chiamareself.tabBarController.navigationItem.hidesBackButton = YES


2

Non dimenticare che ora abbiamo la diapositiva per fare un gesto indietro. Probabilmente vuoi rimuovere anche questo. Non dimenticare di riattivarlo nuovamente se necessario.

if ([self.navigationItem respondsToSelector:@selector(hidesBackButton)]) {
    self.navigationItem.hidesBackButton = YES;
}

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}

1

Aggiungi questo codice nel tuo controller di visualizzazione

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

1

Per me nessuna delle precedenti sembrava funzionare, senza effetti visivi. Sto usando gli storyboard con una vista "incorporata" in un controller di navigazione.

Quindi a livello di codice aggiungo il mio menuItems e per qualche ragione il "backButton" è visibile quando eseguo il debug visivo della gerarchia della vista e la mia icona MenuItem viene visualizzata sotto il "pulsante back" invisibile.

Ho provato le impostazioni, come suggerito dai vari metodi di hook e che non ha avuto alcun effetto. Poi ho provato un approccio più brutale e ho ripetuto la sottoview che non ha avuto alcun effetto.

Ho controllato le dimensioni delle mie icone e mi è sembrato giusto. Dopo aver fatto riferimento alle linee guida per l'interfaccia umana di Apple, ho confermato che le mie icone sono corrette. (1 pixel più piccolo nel mio caso 24px 48px 72px).

La parte più strana quindi è la vera correzione ...

Quando aggiungi l'elemento BarButton, assegnagli un titolo con almeno un carattere , nel mio caso un carattere spazio.

Spero che questo aiuti qualcuno.

//left menu - the title must have a space
UIBarButtonItem *leftButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " <--THE FIX 
                                                                    style:UIBarButtonItemStylePlain
                                                                  target:self
                                                                  action:@selector(showMenu)];
leftButtonItem.image = [UIImage imageNamed:@"ic_menu"];

[self.navigationItem setLeftBarButtonItem:leftButtonItem];

1

Non ha funzionato per me in tutti i casi quando ho impostato

self.navigationItem.hidesBackButton = YES;

in viewWillAppear o ViewDidLoad, ma ha funzionato perfettamente quando l'ho impostato in init di viewController.


0

prova questo - self.navigationController?.navigationItem.hidesBackButton = true



0
navigationItem.leftBarButtonItem = nil
navigationItem.hidesBackButton = true

se usi questo blocco di codice all'interno di didLoad o loadView ha funzionato ma non ha funzionato perfettamente. Se guardi attentamente puoi vedere il pulsante Indietro che si nasconde quando la vista viene caricata.

Qual è la soluzione perfetta?

Aggiungi il componente BarButtonItem da componentView (Command + Shift + L) alla barra di destinazione della barra di controllo Controller view.

Seleziona BarButtonItem set Title = "" dal pannello di destra

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.