Pregunta sobre xcode4.2, ios5, uinavigationcontroller, ios – ios 5 cambia el fondo del botón Atrás en el controlador de navegación a transparente

6

He personalizado la barra de título del controlador de navegación con una imagen de fondo, pero me cuesta mucho cambiar el color de fondo del botón Atrás a transparente para que coincida con la barra de título verde que se encuentra debajo. Soy bastante nuevo en el desarrollo de iOS. ¿Alguien puede sugerir lo que se podría hacer?

Aquí está el código que usé para cambiar la barra de título del controlador de navegación, en caso de que ayude:

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

}
</code>

EDITAR: Después de investigar un poco logré lo que quería. Aquí está el código para cambiar la imagen de fondo del botón Atrás:

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

El código anterior agrega la imagen a todos los botones de atrás en el controlador de navegación.

Su solución no funcionará cuando el controlador de navegación se presente en un controlador emergente. La razón de ello es que el fondo de la barra de navegación y el fondo del elemento del botón de la barra trasera en la ventana emergente se dibujan de manera diferente. Tuyen Dinh

Tu respuesta

1   la respuesta
5

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

<code>- (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];
    }
}
</code>
gracias adig! ¡Es útil! Kite Runner
No hay otra forma que yo sepa. Si desea incluir esto en todos sus controladores de vista, cree unBaseViewController clase que implementa esto en elviewDidLoad Método y utilícelo 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 principales para llamar al[super viewDidLoad]. adig
¡gracias por la respuesta! Está funcionando, pero solo para un nivel de profundidad y no para todas las vistas. ¿Pero no hay otra manera incorporada? ¡Gracias! Kite Runner

Preguntas relacionadas