2012-07-23 28 views
9

Tengo un controlador de barra de pestañas con controlador de 4 vistas y tengo este controlador de barra de pestañas en un controlador de navegación.Elemento de botón de barra en una sola barra de navegación del controlador de barra de pestañas

Quiero mostrar un UIBarButtonItem para solo un controlador de vista específico del controlador de la barra de pestañas.

He intentado utilizar el siguiente

if (tabBarController.selectedViewController == customTourViewController) 
    { 
     [tabBarController.navigationItem setRightBarButtonItem:done]; 
    } 

pero el botón no se presenta.

Si pongo cada controlador de vista en un controlador de navegación, entonces el botón aparece solo para esa vista, pero termino teniendo 2 barras de navegación.

¿Hay alguna manera de implementar la primera solución? Gracias.

Respuesta

21

En mis controladores de vista individuales para las distintas fichas, Tengo el siguiente en el que necesita el botón:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                    style:UIBarButtonSystemItemDone target:nil action:nil]; 
    self.tabBarController.navigationItem.rightBarButtonItem = rightButton; 
} 

Y en los controladores de vista que no es necesario el botón, que tengo:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    self.tabBarController.navigationItem.rightBarButtonItem = nil; 
} 

lo tanto, si no está funcionando para ti, no estoy seguro si es su referencia a tabBarController sin la designación self (si omito la self consigo un error del compilador). ¿Y dónde está este código porque si está en su subclase tabBarController, entonces quiere self.navigationItem.rightBarButtonItem, ¿verdad? ¿Tiene su propio ivar definido para ese nombre de variable? ¿O está seguro de que done está definido correctamente (es decir, no nil)? ¿O está seguro de que este código se está llamando en absoluto (quizás establezca un punto de interrupción o inserte un NSLog y asegúrese de que se esté alcanzando este código)?

+0

¡Gracias! Eso ayudó. – ratsimihah

+0

funciona: D Gracias –

+0

¡Guardado el compañero de día! ¡Aclamaciones! – Marcelo

3

Como alternativa, puede implementar viewWillDisappear en la misma vista donde necesita el botón.

-(void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated];   
    self.tabBarController.navigationItem.rightBarButtonItem = nil; 
} 
Cuestiones relacionadas