O "botão voltar" de a UINavigationController
por padrão mostra o título da última exibição na pilha. Existe uma maneira de ter texto personalizado no botão Voltar?
ios
iphone
uinavigationcontroller
Ali Shafai
fonte
fonte
self.navigationController.navigationBar.topItem.title = @"Custom text";
Respostas:
A partir deste link :
Como Tyler disse nos comentários:
fonte
release
oUIBarButtonItem
.UIBarButtonItemStyleBordered
com uma chamada para a propriedadeself.navigationItem.backBarButtonItem.style
. Documentação: developer.apple.com/library/ios/documentation/uikit/reference/…Você pode definir o texto no Interface Builder:
Selecione o item de navegação do ViewController ao qual o botão Voltar retornaria:
No inspetor de atributos do painel de utilitários, insira sua etiqueta para o Botão Voltar:
Eu preferiria essa abordagem ao invés de definir o título no código, como na resposta aceita.
fonte
Eu uso isso:
fonte
Encontrei uma solução útil para isso, basta definir o título do controlador antes de colocar outro controlador na pilha, desta forma:
Em seguida, certifique-se de definir o título original
viewWillAppear
, assim:Isso funciona porque o comportamento padrão
UINavigationController
ao construir o botão voltar durante uma operação de envio é usar o título do controlador anterior.fonte
O título do botão Voltar é padronizado com o título da visualização anterior, portanto, um truque rápido que eu uso é colocar o seguinte código no arquivo .m da visualização anterior.
fonte
no seu método init, adicione o seguinte código:
adicione um método simples, para permitir que o viewcontroller seja descartado:
fonte
Adicione o seguinte código em viewDidLoad ou loadView
Eu testei no iPhone e iPad com iOS 9
fonte
navigationController
etopItem
, por exemplo:self.navigationController?.navigationBar.topItem?.title = "Custom Text"
Adicionando a resposta da rédea. Observe nos documentos da Apple que a declaração de backBarButtonItem é esta:
Portanto, a resposta da rédea vazará memória porque o setter sintetizado será
retain
a instância em que você a passa, que nunca é liberada explicitamente. Você pode remediar isso usandoautorelease
Ou você pode apontar uma variável para a instância para liberá-la explicitamente mais tarde:
Espero que isto ajude!
fonte
fonte
Eu descobri algo interessante. Se você subclassificar
UINavigationController
e substituir opushViewController:animated:
método e fizer algo assim: (lembre-se de que estou usando o ARC)Então, para todos os
ViewControllers
que são pressionados com o seu controlador de navegação, o botão "Voltar" aparecerá automaticamente. Se você deseja alterar o texto de determinados controladores de exibição, pode tentar converter o viewcontroller para uma determinada classe ou seu próprio protocolo personalizado (que o seu viewcontroller herda do qual poderia ter um método comobackButtonText
ou algo parvo), que pode fornecer a você certas informações no controlador de exibição que estão chegando para que você possa personalizar o texto do botão Voltar. Agora, o texto do botão Voltar é tratado em um local que deve ser de responsabilidade exclusiva. Eu tenho que admitir que criar um novo botão para alterar o texto é uma porcaria, mas tudo bem.Alguém pode pensar em uma razão pela qual não fazê-lo assim? Pelo menos você não precisa mexer nos títulos dos controladores de visualização ou precisa se lembrar de criar um novo botão Voltar antes de pressionar o controlador de visualização no controlador de navegação.
fonte
A resposta da rédea funciona bem.
Observe que, se você pressionar mais de um controlador de exibição, o título do botão Voltar alterado será exibido para cada um deles, o que pode não ser o desejado.
Nesse caso, você precisará criar o UIBarButtonItem personalizado sempre que pressionar um controlador de exibição.
Além disso, certifique-se de fazê-lo antes de pressionar o controlador de exibição, caso contrário, você verá um soluço na tela conforme o título for alterado.
fonte
Expandindo a sugestão de Aubrey, você pode fazer isso no controlador de exibição filho:
crie duas variáveis para armazenar os valores antigos do navigationItem.title do pai e o navigationItem do pai
em
viewDidLoad
, adicione o seguinte:em
viewWillDisappear
, adicione o seguinte:Não é perfeito. Você verá o título da visualização pai mudar à medida que o novo controlador é animado. MAS isso atinge o objetivo de rotular o botão voltar personalizado e mantê-lo em forma de um botão voltar padrão.
fonte
Coloque isso em você
viewDidLoad
, espero que resulte no que você está procurandofonte
Se você deseja definir o título no controlador ARRIVING (às vezes mais lógico ..) no swift 3, faça:
no próximo controlador:
geralmente coloco self.setBackButtonNavBar em uma extensão do controlador.
fonte
Sei que essa é uma pergunta antiga e as respostas estão atualizadas!
A maneira mais fácil é fazer isso no ViewController pai:
ou seja, aquele que leva você ao próximo controlador de exibição.
fonte
Fazendo isso no código, remova o estilo do botão Voltar do
UINavigationConroller
. Se você adicionar um Item de Navegação em cada uma das suas visualizações, poderá definir o título do botão de retorno noStoryBoard
.fonte