2010-09-24 12 views
33

Ho un UIBarButtonItem che proprio non vuole essere disabilitato. Versione breve: quando chiamoCome disabilitare UIBarButtonItem?

[myBarButtonItem setEnabled:NO]; 

Non succede nulla.

myBarButtonItem è un IBOutlet in myVIewController. myViewController è stato aggiunto come oggetto a MainWindow in Interface Builder. La presa myBarButtonItem è stata collegata a BarButtonItem e ha le linee @syntesize e property corrispondenti.

@property (nonatomic, retain) IBOutlet UIBarButtonItem *myBarButtonItem; 

In myViewController.m,

@synthesize myBarButtonItem; 

Chiunque ha un'idea perché il metodo di cui sopra setEnabled non ha alcun effetto? Grazie!

AGGIORNAMENTO: risolto! Non so perché, ma a quanto pare la presa non veniva impostata. Ho usato il mio delegato app come oggetto padre per UIBarButtonItem e tutto ha funzionato.

+1

Hanno effettivamente verificato nel debugger che 'myBarButtonItem' non è 'nil'? –

+0

Come hai dichiarato il campo di supporto in @interface? – toxaq

+0

Perché hai @synthesize myBarButtonItem; nel file di intestazione "myViewController.h". Non dovrebbe essere nella tua implementazione? Penso che una volta spostato dovrebbe risolvere il problema. Sono nuovo allo sviluppo di iOS ma ogni volta che ho una proprietà nel file di intestazione il sintetizzatore corrispondente è nel mio file .m (implementazione). –

risposta

66

È possibile disattivare il tasto di navigazione a sinistra dall'interno di un UIViewController come questo, senza l'utilizzo di qualsiasi IBOutlet:

self.navigationItem.leftBarButtonItem.enabled = NO; 

Per disattivare il pulsante di navigazione destro:

self.navigationItem.rightBarButtonItem.enabled = NO; 

Swift3

self.navigationItem.rightBarButtonItem?.isEnabled = false 
+1

questa dovrebbe essere la risposta corretta ora. – jd291

12

Se la barra degli strumenti ha un IBOutlet (e hai controllato per assicurarsi che sia non-nil), provare:

[ [ [ myToolBar items ] objectAtIndex: myBarButtonItemIndex ] setEnabled:(NO) ]; 
1

Nel mio caso (Swift) ho avuto 2 barButtonItems aggiunti come una matrice - in modo per disattivare loro questo ha fatto il trucco

navigationItem.rightBarButtonItems?.first?.enabled = false 
    navigationItem.rightBarButtonItems?.last?.enabled = false 
Problemi correlati