2010-01-19 5 views
14

Cela ne semble pas fonctionner. Qu'est-ce que je fais mal?en essayant de créer par programme rightBarButtonItem

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

commentaire de Steve à propos de vue ne charge semble probable, je tous essayer d'utiliser la méthode setter setRightBarButtonItem si elle encore doesn ne fonctionne pas. –

Répondre

11

Je normalement mettre ce code dans la méthode viewDidLoad plutôt que la méthode awakeFromNib; Je ne suis pas sûr que c'est là que réside votre problème. Que signifie "ne pas travailler"?

+0

Ne fonctionne pas signifie, le bouton ne s'affiche pas dans la barre de navigation. –

+0

Steve a raison. Chargez-le dans -viewDidLoad à la place. -awakeFromNib ne sera pas appelé dans un contrôleur de vue - uniquement dans une classe UIView. –

+8

Steve et Matt ont tort. Ce code est bien dans '-awakeFromNib' si et seulement si le VC lui-même est réellement chargé à partir d'une plume. Matt, '-awakeFromNib' est appelé sur chaque objet créé à partir d'une plume, y compris les VC. Très probablement le VC lui-même n'est pas dans une plume, mais il utilise une plume, d'où la confusion de Sam. Dans ce cas, il devrait aller dans '-initWithNibName: bundle:'. –

3

Essayez ceci:

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

Pourquoi n'y a-t-il pas besoin de le publier explicitement, juste par curiosité? – diatrevolo

+1

Parce qu'il est auto-libéré. – pt2ph8

21

je suppose que vous ajoutez le UIBarButtonItem au mauvais objet! vous devez l'ajouter, au RootViewController (au lieu du UINavigationController, comme vous avez probablement fait)

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

C'était la grande chose pour moi, j'essayais d'assigner le bouton au contrôleur de navigation, pas le rootViewController. Cela devrait être la réponse acceptée. –

+0

Génial ...! .... –