2010-01-19 7 views
14

Esto no parece estar funcionando. ¿Qué estoy haciendo mal?tratando de crear programáticamente RightBarButtonItem

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

comentario de Steve acerca vista no parece probable de carga, que había todo intento usando el método setter setRightBarButtonItem si todavía doesn no funciona –

Respuesta

11

Me normalmente poner este código en el viewDidLoad método en lugar del método awakeFromNib; No estoy seguro de si es ahí donde reside tu problema. ¿Qué significa "no funciona"?

+0

No funciona significa que el botón no se muestra en la barra de navegación. –

+0

Steve tiene razón. Cargarlo en -viewDidLoad en su lugar. -awakeFromNib no se llamará en un controlador de vista, solo en una clase UIView. –

+8

Tanto Steve como Matt están equivocados. Este código está bien en '-awakeFromNib' si y solo si el VC mismo se carga realmente desde un plumín. Matt, '-wakeFromNib' se llama en cada objeto que se crea desde una punta, incluidos los de VC. Lo más probable es que el VC en sí no esté en una punta, pero usa una punta, de ahí la confusión de Sam. En este caso, debería ir en '-initWithNibName: bundle:'. –

3

Tal vez puedas probar:

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

¿Por qué no hay necesidad de publicar esto explícitamente, solo por curiosidad? – diatrevolo

+1

Porque se lanzó automáticamente. – pt2ph8

21

mi suposición es que se agrega el UIBarButtonItem al objeto equivocado! es necesario añadir que, a la RootViewController (en lugar de la UINavigationController, como probablemente lo hizo)

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

Esto fue lo más importante para mí, estaba intentando asignar el botón al controlador de navegación, no al controlador raíz. Esta debería ser la respuesta aceptada. –

+0

¡Genial ...! ... –

Cuestiones relacionadas