Pergunta sobre xcode4.2, ios5, uinavigationcontroller, ios – ios 5 alterar o fundo do botão Voltar no controlador de navegação para transparente

6

Eu personalizei a barra de título do controlador de navegação com uma imagem de fundo, mas estou realmente lutando para alterar a cor de fundo do botão Voltar para transparente, de forma que ela corresponda à barra de título verde abaixo dela. Eu sou relativamente novo no desenvolvimento do iOS. Alguém pode sugerir o que poderia ser feito?

Aqui está o código usado para alterar a barra de título do controlador de navegação, caso isso aconteça:

<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: Depois de fazer um pouco de pesquisa, consegui o que queria. Aqui está o código para alterar a imagem de fundo do botão Voltar:

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

O código acima adiciona a imagem a todos os botões de retorno no controlador de navegação.

Sua solução não funcionará quando o controlador de navegação for apresentado em um controlador de popover. A razão para isso é que o plano de fundo do item de botão de fundo e barra de navegação no popover são desenhados de forma diferente. Tuyen Dinh

Sua resposta

1   a resposta
5

mas pode criar seu próprio botão para substituí-lo.

<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>
obrigado pela resposta! Está funcionando, mas apenas para um nível de profundidade e não para cada ponto de vista. Mas não há outro caminho embutido? obrigado! Kite Runner
obrigado adig! É útil! Kite Runner
de outra maneira que eu conheço. Se você quiser incluir isso em toda a sua visão, os controladores criam umBaseViewController classe que implementa isso noviewDidLoad método e usá-lo como uma classe base para todos os seus controladores de visualização no aplicativo. Apenas tome cuidado ao substituir viewDidLoad em seus controladores de visualização principal para chamar o[super viewDidLoad]. adig

Perguntas relacionadas