2012-05-08 23 views
6

He personalizado la barra de título del controlador de navegación con una imagen de fondo, pero realmente estoy luchando para cambiar el color de fondo del botón Atrás a transparente para que coincida con la barra de título verde debajo de él. Soy bastante nuevo en el desarrollo de iOS. ¿Alguien puede sugerir qué se puede hacer?ios 5 cambiar el fondo del botón Atrás en el controlador de navegación a transparente

Este es el código para que solía cambiar la barra de título de mando de navegación, en caso de que ayuda a:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     UIImage *image = [UIImage imageNamed:@"greenbar.png"]; 
     [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
     // [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    } 

    //change back button image 

} 

EDITAR: Después de hacer un poco de investigación he conseguido lo que quería . Aquí está el código para cambiar la imagen de fondo para el botón de retroceso:

UIImage *image1 = [UIImage imageNamed:@"back-bt.png"]; 
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image1 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

El código anterior se suma la imagen para todos los botones de nuevo en el control de navegación.

+0

Su solución no funcionará cuando el controlador de navegación se presente en un controlador de popover. El motivo es que el fondo de la barra de navegación y el fondo del elemento del botón de la barra trasera en el popover se dibujan de forma diferente. –

Respuesta

5

No puede cambiar la apariencia del botón de retroceso predeterminado, pero puede crear su propio botón para reemplazarlo.

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     UIImage *image = [UIImage imageNamed:@"greenbar.png"]; 
     [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
     // [[UIBarButtonItem appearance] setBackButtonBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 

    } 

    //change back button image 
    if(self.navigationController.viewControllers.count > 1) { 
     UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

     [backButton setTitle:@"Back" forState:UIControlStateNormal]; 
     [backButton addTarget:self action:@selector(didTapBackButton:) forControlEvents:UIControlEventTouchUpInside]; 
     backButton.frame = CGRectMake(0.0f, 0.0f, 64.0f, 41.0f); 
     UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 

     self.navigationItem.leftBarButtonItem = backButtonItem; 
    } 
} 



- (void) didTapBackButton:(id)sender { 
    if(self.navigationController.viewControllers.count > 1) { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 
+0

gracias por la respuesta! Está funcionando, pero solo para un nivel profundo y no para cada vista. ¿Pero no hay otra manera de construir? ¡Gracias! –

+3

de otra manera que yo sepa. Si desea incluir esto en todos sus controladores de vista, cree una clase 'BaseViewController' que implemente esto en el método' viewDidLoad' y úselo como una clase base para todos sus controladores de vista en la aplicación. Solo tenga cuidado al anular viewDidLoad en sus controladores de vista principal para llamar a '[super viewDidLoad]'. – adig

+0

gracias adig! ¡Es útil! –

Cuestiones relacionadas