Atualmente, o valor padrão do botão da barra esquerda é o título da visualização que carregou a atual, ou seja, a visualização a ser mostrada quando o botão é pressionado (botão voltar).
Quero alterar o texto mostrado no botão para outra coisa.
Tentei colocar a seguinte linha de código no método viewDidLoad do controlador de exibição, mas ele não parece funcionar.
self.navigationItem.leftBarButtonItem.title = @"Log Out";
O que devo fazer?
Obrigado.
-viewDidLoad:
No ChildVC, isso funcionou para mim ...
Trabalha em Swift também!
fonte
Aqui está a documentação para backBarButtonItem :
View Controller A (o controlador de exibição "pai" ):
Quando qualquer outro controlador de visualização B está no topo da pilha de navegação e A está logo abaixo, o botão voltar de B terá o título "Curto" .
fonte
no Xcode 4.5 usando storyboard, de longe a solução mais fácil que encontrei quando o valor do botão Voltar não precisa mudar dinamicamente é usar o campo "Botão Voltar" associado ao item de navegação do controlador de exibição para o qual você deseja que o botão "Voltar" diga outra coisa.
por exemplo, na captura de tela abaixo, quero o botão Voltar do (s) controlador (es) de exibição que pressiono para ter "Voltar" como o título do botão Voltar.
claro, isso não funcionará se você precisar do botão voltar para dizer algo um pouco diferente a cada vez ... existem todas as outras soluções aqui para isso.
fonte
Eu sei, a pergunta é muito antiga, mas encontrei uma boa solução.
Trabalhos do childView! Testado com iOS 7.
fonte
Talvez eu esteja sendo simplista demais, mas, na documentação da Apple, o texto é:
A solução marcada como correta acima define um item de botão padrão do controlador pai. É a resposta certa, mas estou resolvendo o problema alterando a
self.title
propriedade do UIViewController antes de colocar o novo controlador na pilha NavigationController.Isso atualiza automaticamente o título do botão voltar no próximo controlador e, desde que você
self.title
retorne ao que deveria estar,viewWillAppear
não consigo ver esse método causando muitos problemas.fonte
Isso funciona melhor para mim. Experimentar :
fonte
No Swift / iOS8, o seguinte funcionou para mim:
Portado da resposta de Felipe.
fonte
self.navigationController?.navigationBar.topItem?.backBarButtonItem
Ok, aqui está o caminho. Se você tem um controlador de exibição "primeiro" e navega em outro controlador de exibição "segundo" pressionando um botão ou etc., você precisa fazer algum trabalho. Primeiro, você precisa criar um BarButtonItem no "segundo" método ViewDidLoad do controlador de exibição como este;
Depois de fazer isso, você precisa escrever no código a ação "btnBack" no mesmo arquivo .m como este;
Isso é tudo.
fonte
leftBarButtonItem
não tem a aparência de abackBarButtonItem
, se isso for importante no design do aplicativo.Eu tinha um controlador de exibição pai com um título muito longo. Isso resultou no sangramento do texto do botão Voltar no título do controlador de exibição filho.
Depois de tentar várias soluções diferentes, foi isso que acabei fazendo (expandindo a abordagem @ john.k.doe):
Usando o Xcode 7.2, Swift 2
Navigation Item
à cena Parent View Controller (não o VC filho)Attributes Inspector
seu novoNavigation Item
, digite umspace
caractere noBack Button
campo. Mais sobre isso mais tarde.snippet:
Explicação:
O botão Voltar pertence ao controlador de exibição pai. O
Navigation Item
botão fornece um identificador para o botão Voltar, para que você possa definir o título no código ou no Storyboard.Nota:
Se você deixar o
Navigation Item
Back Button
texto como a sequência vazia padrão, o título do botão voltar se tornará "Voltar".Outras abordagens funcionam, por que usar esta?
Embora seja possível substituir o título do botão de retorno no controlador de exibição infantil, foi um desafio identificá-lo até que ele já tivesse piscado brevemente na tela.
Algumas das abordagens constroem um novo botão de retorno e substituem o existente. Tenho certeza de que funciona e provavelmente é necessário em alguns casos de uso. Mas eu prefiro aproveitar as APIs existentes sempre que possível.
Alterar o
title
controlador de exibição pai é a solução mais rápida para algumas situações. No entanto, isso altera o título do pai, portanto você precisa gerenciar o estado. As coisas também ficam confusasTab Bar Controller
porque as alterações de título causam efeitos colaterais nosTab Bar Item
títulos.fonte
Para aqueles que usam storyboards, selecione o quadro do controlador pai (e não o que está mantendo a visão de destino) (certifique-se de clicar com o botão direito do mouse na barra de navegação e abra o inspetor de atributos, onde encontrará três entradas de formulário. A terceira " botão voltar "é o que estamos procurando.
fonte
Versão rápida:
No seu ViewController filho:
fonte
Aqui está outra maneira de fazer isso.
No seu controlador de exibição pai, implemente o seguinte método:
No seu controlador de exibição filho, quando você deseja alterar o título, isso funcionará:
Eu nunca consegui fazer a
parentViewController
propriedade funcionar:Não sei se isso é um bug ou não o estou usando corretamente. Mas pegar o penúltimo controlador de exibição na
viewControllers
matriz aponta para o controlador de exibição pai, e posso chamar os métodos pai corretamente com essa referência.fonte
Está bem. Eu pessoalmente odiava todas essas opções. Portanto, eu inventei o meu.
Com base nas informações que eu vi. Parece que o controlador de visão anterior está no controle de seu próprio botão "Voltar", que será apresentado no controlador de visão pressionado.
Eu criei um método Lazy Load para o navigationItem no controlador que deseja o botão Voltar alterado.
O meu é um controlador de convite por comprador
Convidar comprador é o texto definido por padrão.
mas o botão voltar precisava ser Convidar
Aqui está o código que eu usei para criar o botão Voltar.
Coloquei esse código na parte superior do arquivo Implementatio (.m) do controlador e substituiu o método do super automaticamente.
Eu sinto que essa é uma maneira muito mais elegante de conseguir isso.
Coloco esse código em um único local e ele é preenchido automaticamente quando necessário.
Não é necessário chamar o código antes de cada solicitação de envio.
Espero que isto ajude
fonte
fonte
Aqui está a resposta:
Em
viewDidAppear:animated
(NÃO emviewDidLoad
), faça o seguinteIsso se você quiser manter a forma do botão Voltar.
fonte
Nenhuma das soluções explicadas aqui funcionou para mim. Então, o que eu fiz foi remover o título da cena de onde vim da seguinte maneira:
self.title = @"";
Portanto, quando uma nova cena é apresentada, o texto de trás não aparece.
Concordo plenamente que essa não é uma solução clara, mas funcionou e nenhuma das explicações funcionou para mim.
fonte
Descobri que é melhor alterar o título do controlador de exibição atual na pilha de navegação para o texto desejado do botão voltar antes de passar para o próximo controlador de exibição.
Por exemplo
Em viewDidAppear, defina o título novamente para o título desejado para o VC original. Voila!
fonte
Para Swift:
fonte
Descobri que a maneira mais fácil de alterar o nome do botão voltar é definir o título dos controladores de exibição como o título do botão voltar e, em seguida, substituir o titleView no item de navegação dos controladores de exibição por um rótulo personalizado com seu real nome.
Como isso:
CustomViewController.m
Isso fará com que seu título no UINavigationBar pareça nativo. Dando ao controlador de exibição a capacidade de ter título separado e título do botão Voltar.
No caso dos controladores de visualização A e B, A é responsável por informar como deve ser o botão Voltar, enquanto B é exibido.
EDIT: Isso também mantém a aparência nativa do botão Voltar (o item do botão da barra com seta para a esquerda).
fonte
Este código também funciona. Coloque isso no controlador raiz do controlador de navegação:
fonte
Sou novo no iOS, mas fornecerei minha resposta muito simples de substituir a classe do controlador de navegação. Eu tenho simples substituir os métodos push e pop e salvar o título do controlador de exibição anterior. Desculpe por colar no bloco js. Estava um pouco confuso como colá-lo no bloco de código normal.
fonte
self.navigationController.navigationBar.backItem.title = @"TEXT";
E em Swift:
fonte
você pode colocá-lo onde quiser no código no controlador de controle, o que permite que você tenha botões diferentes para diferentes visões filho.
fonte
A maioria das soluções mata o estilo original do BackButton (o botão da barra com seta para a esquerda) enquanto adiciona um botão comum com o título desejado.
Portanto, para manter o estilo original, existem duas maneiras:
1º: Usar o estilo de botão não documentado (110 ou algo parecido) que eu prefiro não fazer. Mas se você quiser, pode encontrar como fazê-lo aqui, no stackoverflow.
2º: Para usar a idéia de Trenskow. Eu gostei e usei um pouco alterado.
Em vez de substituir o título - (NSString *), decidi manter o título original da seguinte maneira (o que me permite usar os títulos da ponta, bem como o título no push state btw).
Esta solução funciona bem e parece nativa. Além disso, se usá-lo no método viewDidLoad, impede a execução mais de uma vez.
Também tentei a solução de Jessedc, mas parece ruim. Faz com que a barra de título do usuário seja alterada rapidamente, do original para o desejado e o do BackButton.
fonte
Isso funciona para mim como uma versão "simplificada" das respostas postadas anteriormente.
Lembre-se de colocar o código dentro do controlador de exibição pai (por exemplo, a exibição que possui sua exibição de tabela ou UITableViewController), não a exibição filho ou de detalhes (por exemplo, UIViewController).
Você pode localizar facilmente a sequência do botão Voltar assim:
fonte
Temos dois VC's A e B.
Se você deseja alterar o título em B, escreva esse código em A
Swift 4.1 Xcode 9.4
fonte
A resposta de Stan foi a melhor. Mas também há um problema: quando você usa o controlador com uma barra de guias e altera o título do controlador, também pode alterar o título da barra de guias. Portanto, a melhor resposta é alterar apenas o view_controller.navigationItem.title e usar o view_controller.navigationItem .título na função. A resposta está aqui: (Com o ARC e adicione-os ao viewDidLoad do view)
No meu uso, eu faço uma função como essa, apenas tenho o recurso com um código de linha no viewDidLoad.
fonte
Se você deseja não apenas alterar o texto do botão Voltar para o mesmo texto e permanecer a forma original da seta à esquerda, mas também fazer algo quando o usuário clicar no botão Voltar, recomendo que você dê uma olhada no meu " CustomNavigationController " .
fonte
PROBLEMA: O texto "Voltar" na barra de navegação não pode ser substituído.
MOTIVO: O rótulo "Voltar" é definido na barra de navegação após o envio de uma visualização porque o atributo .title no controlador de visualização pai foi definido como nulo (ou não inicializado).
UMA SOLUÇÃO: Se você definir self.title = "Whatever ...", verá que, em vez de "Back", aparecerá "Whatever ..." depois de pressionar o novo controlador de exibição.
fonte