Pergunta

Estou alterando o título do item do botão traseiro no ViewDidappear de um controlador da seguinte maneira:

self.navigationController.navigationbar.backitem.title = @"anterior";

Ele muda o tittle adequadamente, mas estou tendo um comportamento estranho. Quando seleciono o botão "anterior", ele altera o título do controlador que está na pilha (ou seja, o controlador pai agora tem o título "anterior".

Você agora por que isso aconteceu?

Foi útil?

Solução

Quando você está usando um controlador de navegação, chamando [auto -estabelecimento:@"title"]; Dentro de qualquer controlador de exibição na pilha, definirá o título da barra de navegação. Este também é o título usado por padrão para o botão de volta quando você pressionou um novo controlador de exibição. Aparentemente, pelo que você está experimentando, definindo explicitamente o título do backitem, também o define para o título da barra de navegação para o controlador de exibição anterior, substituindo o que especificado na chamada para -settitle no controlador de exibição.

Você provavelmente estará melhor gerenciando o título de dentro dos controladores de exibição em sua pilha de navegação. Quando você for pressionar um novo controlador de exibição, faça isso:

[self setTitle:@"Previous"];
NextViewController *controller = [[NextViewController alloc] init];
[[self navigationController] pushViewController:controller animated:YES];
[controller release], controller = nil;

Agora, quando o próximo controlador de exibição exibe, o botão de volta com "anterior". Agora, você só precisa alterá -lo de volta ao seu título real deve estar no -VIEWWILLAPPEAR:

- (void)viewWillAppear:(BOOL)animated;
{
    [self setTitle:@"Real Title"];
    [super viewWillAppear:animated];
}

Pode parecer um pouco hacky, mas é melhor do que tentar substituir a funcionalidade da barra de navegação. Lutar com a pilha de controladores Nav/Nav pode ser muito frustrante.

Atenciosamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top