2010-01-19 10 views
14

Questo non sembra funzionare. Che cosa sto facendo di sbagliato?tenta di creare a livello di codice rightBarButtonItem

-(void)awakeFromNib{ 
    UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showNewEventViewController)]; 
    self.navigationItem.rightBarButtonItem = rightBarButtonItem; 
    NSLog(@"awaked"); 
    [rightBarButtonItem release]; 
} 
+1

il commento di Steve in merito a View ha carico suoni probabile, avevo tutto provare a utilizzare il metodo setter setRightBarButtonItem se ancora doesn lavorare –

risposta

11

che normalmente inserire questo codice nel metodo viewDidLoad piuttosto che il metodo awakeFromNib; Non sono sicuro se questo è il tuo problema. Cosa significa "non funziona"?

+0

Non funziona significa che il pulsante non viene visualizzato nella barra di navigazione. –

+0

Steve ha ragione. Caricalo invece in -viewDidLoad. -wakeFromNib non verrà richiamato in un controller di visualizzazione, solo in una classe UIView. –

+8

Sia Steve che Matt hanno torto. Questo codice va bene in '-awakeFromNib' se e solo se il VC stesso viene effettivamente caricato da un pennino. Matt, '-awakeFromNib' viene chiamato su ogni singolo oggetto creato da un pennino, compresi i VC. Molto probabilmente il VC stesso non è in un pennino, ma usa un pennino, da qui la confusione di Sam. In questo caso, dovrebbe andare in '-initWithNibName: bundle:'. –

3

Prova a modificare:

- (void) initUI { 
    UIBarButtonItem *btnCancel = [[[UIBarButtonItem alloc] initWithTitle:@"Cancel" 
            style:UIBarButtonItemStyleBordered 
            target:self 
            action:@selector(dismiss)]autorelease];  

    self.navigationItem.rightBarButtonItem = btnCancel; 

    //[btnCancel release]; no need to explicitly release the item 

} 
+3

Perché non c'è bisogno di rilasciarlo esplicitamente, solo per curiosità? – diatrevolo

+1

Perché è autoreleased. – pt2ph8

21

la mia ipotesi è che si aggiunge il UIBarButtonItem all'oggetto sbagliato! è necessario aggiungere che, al RootViewController (invece al UINavigationController, come probabilmente avete fatto)

YourRootViewController *theRootController = [[YourRootViewController alloc] init]; 

UINavigationController* navContainer = [[UINavigationController alloc] initWithRootViewController:theRootController]; 

UIBarButtonItem *btnCancel = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(dismiss)];  
theRootController.navigationItem.rightBarButtonItem = btnCancel 

[navContainer setModalTransitionStyle:UIModalTransitionStyleCrossDissolve]; 
[self presentModalViewController:navContainer animated:YES]; 
+1

Questa è stata la cosa più importante per me, stavo cercando di assegnare il pulsante al controller di navigazione, non a rootViewController. Questa dovrebbe essere la risposta accettata. –

+0

Fantastico ...! .... –

Problemi correlati