2009-08-04 11 views
14

Ho aggiunto un elemento BarButton a sinistra di nav.bar tramite Interface Builder e nel codice che desidero visualizzare solo nella modalità di modifica della visualizzazione tabella. Ma non ho trovato alcuna proprietà nascosta per impostare il leftBarButtonItem (come: self.navigationItem.leftBarButtonItem.hidden = YES).Hiding UINavigationIl tasto barra

Posso solo impostare la proprietà enabled. Qualcuno sa come controllare il nascondino e mostrare le proprietà del leftBarButtonItem, per favore aiuto.

risposta

7

Sono quasi sicuro che l'unico modo per "nasconderlo" è annullarlo.

self.navigationItem.leftBarButtonItem = nil; 

Anche se non è una risposta perfetta alla tua domanda, dal momento che in fondo si libera del tasto, invece di nasconderlo. Dovrai ricrearlo o mantenere il tuo pulsante originale e semplicemente impostare leftBarButtonItem sul tuo UIBarButtonItem.

+0

Grazie per la risposta. Stavo anche pensando a un simile approccio se non riesco a nascondermi. – Sreehari

2

Non c'è nulla nella documentazione che suggerisca che gli elementi della barra abbiano una proprietà nascosta.

Perché non impostare

self.navigationItem.leftBarButtonItem = nil; 

quando l'utente non sta modificando, quindi impostare

self.navigationItem.leftBarButtonItem = whateverBarButtonItem; 

quando l'utente sta modificando? Ciò richiede di ricreare il pulsante ogni volta o di memorizzarlo per la durata del ciclo di vita della vista. Né è terribilmente doloroso, ma no, non è così facile come una proprietà nascosta.

+0

Neil mi ha battuto - esattamente. –

55

Questo funziona ho provato io stesso

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

In alcuni casi l'impostazione su nil non ha funzionato per me, ma l'impostazione hidesBackButton su YES ha funzionato! Grazie. –

+1

L'impostazione su nil consentirà a navigationItem di seguire il suo comportamento predefinito, che è quello di mostrare un pulsante indietro se ci si trova in una sottoview di un controller di navigazione, ecco perché è necessario impostare hidesBackButton su true se non si desidera mostrare nulla sempre – Nycen

+1

Sto scoprendo che questo non funziona a tempo di 'viewDidLoad', ma funziona su' viewWillAppear: 'time. – ThomasW

1

È possibile utilizzare

[self.navigationItem.leftBarButtonItem setEnabled:TRUE]; 

in quanto non v'è altro modo per nasconderlo. quindi disabilitalo.

3

Ho appena creato il mio "nascondere" la funzione esposizione qui sotto:

- (void)hideClearButton:(BOOL)hide { 

    if (hide) { 
     self.navigationItem.leftBarButtonItem = nil; 
    } 
    else { 
     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] 
               initWithTitle:NSLocalizedString(@"Clear", @"Recents") 
               style:UIBarButtonItemStylePlain 
               target:self action:@selector(clearAll:)]; 

    } 
} 

si può semplicemente chiamare come:

[self hideClearButton:YES]; //hide it 

o

[self hideClearButton:NO]; //show it 
1

Per nascondere/disattivare

[self.navigationItem.leftBarButtonItem setEnabled:FALSE]; 
.210

per mostrare/attivare

[self.navigationItem.leftBarButtonItem setEnabled:TRUE]; 
+0

Giusto, ma True e False funziona anche come fascino! – pkc456

+1

Abbastanza giusto che facciano. Basti pensare che attenersi alla sintassi dell'obiettivo-C aiuta la leggibilità. In questo caso credo sia irrilevante. – Tander

4

È possibile utilizzare

// Hide 
self.navigationItem.leftBarButtonItem = nil; 

// Show 
self.navigationItem.leftBarButtonItem = self.myBarButtonItem 

La chiave è fare in modo di avere una forte di riferimento alla voce pulsante prima nilling leftBarButtonItem.

@property (strong, nonatomic) IBOutlet UIBarButtonItem *myBarButtonItem; 
0

Ben farlo non era un'opzione perché volevo mostrarlo di nuovo e non volevo creare nuovamente un pulsante.

così quello che ho fatto è stato

UIBarButtonItem *barButton = (UIBarButtonItem *)self.navBar.topItem.leftBarButtonItem; 
barButton.customView.hidden = true;//Hide 
barButton.customView.hidden = false;//Show 

funziona per me. (il mio leftBarButtonItem è stato creato usando customView)

Spero che sia d'aiuto.

0

Questo lavoro soluzione per me

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

Ho una funzione facile fare questo. Ho una navigazione come questa. Navigation Bar Arriva sotto forma di Interface Builder, ha un'immagine di sfondo.

@IBOutlet weak var memberBtn: UIBarButtonItem! 

è possibile nascondere/mostrare da:

func hideMemberBtn() { 
    memberBtn.isEnabled = false 
    memberBtn.tintColor = UIColor.clear 
} 
func showMemberBtn() { 
    memberBtn.isEnabled = true 
    memberBtn.tintColor = UIColor.white 
} 

E 'facile, ma lavorare per me. Puoi cambiare tintColor come necessario. Speriamo in aiuto:]