Como alterar o texto em um botão Voltar

90

Por padrão, o botão Voltar usa como texto o título de um viewcontroller. Posso alterar o texto no botão Voltar sem alterar o título de um controlador de visualização? Preciso disso porque tenho um controlador de visualização cujo título é muito longo para exibir e, neste caso, gostaria de exibir apenas "Voltar" como legenda para o botão Voltar.

Tentei o seguinte, mas não funcionou:

self.navigationItem.leftBarButtonItem.title = @"Back";

Obrigado.

Ilya Suzdalnitski
fonte
3
Lembre-se de que os botões Voltar têm títulos por um motivo. Ao alterar o título para "Voltar", você está roubando do usuário informações sobre para onde o botão volta.
Simon

Respostas:

167

Experimentar

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

Descobri isso olhando os documentos backBarButtonItem nos documentos da Apple para UINavigationItem .

Marc W
fonte
1
Não tenho a chance de testar isso agora, mas isso se aplica à forma apontada para a esquerda dos botões Voltar integrados ou mantém a forma retangular padrão do UIBarButtonItem?
Marco
Na verdade, não tenho certeza. Presumo que apenas manteria a forma do botão Voltar automaticamente, já que você está definindo a propriedade backButton, mas você teria que testá-lo para descobrir. Estou curioso também.
Marc W
2
Sim, funcionou! Sim muda o título, e sim, salva a forma. Obrigado por ajudar.
Ilya Suzdalnitski
1
Observação: o botão Voltar é retido duas vezes [1x da alocação, 1x da retenção da propriedade]. No entanto, se você não alterar o botão Voltar, ele é efetivamente inofensivo.
Kelvin de
29
Veja o comentário de Marco abaixo - você deve chamar isso no controlador que está prestes a enviar algo novo, não no controlador que está sendo enviado.
Bill
97

A abordagem de Marc W funcionou muito bem, uma vez que descobri em qual controlador aplicá-la: aquele que estava sendo renomeado, não o que estava por cima. Portanto, se esta é a pilha de navegação:

(bottom)  ControllerA -> ControllerB  (top)

... e você deseja dar um título mais curto para ControllerA no botão traseiro exibido quando ControllerB está no topo , você aplica a alteração de propriedade para ControllerA .

Portanto, está mais no contexto de self.title, não como os outros configuradores do botão da barra esquerda / direita.

Marco
fonte
13
Este é um detalhe muito importante.
Bill
4
wcochran, ele funciona com storyboard, apenas certifique-se de definir o botão Voltar do controlador pai. Portanto, se você tiver o controlador A que aponta para o controlador B (via segue do storyboard), a fim de personalizar o texto do botão Voltar no controlador B, é necessário definir a propriedade "Botão Voltar" para o controlador A no editor de storyboard.
interromper
Obrigado Marco. O que eu senti sobre essa pergunta é que todo mundo está tentando responder (e responder certo), mas não para a pergunta que está sendo feita. Você basicamente acertou o prego na cabeça e corretamente. Obrigado por isso!
theiOSguy
1 para detalhes importantes. A resposta acima não funcionará para você, a menos que você entenda ESTA resposta.
baptzmoffire
Você está certo, o teclado do novo MacBook One é um pouco difícil de se acostumar.
Mason G. Zhwiti de
48

Você pode fazer isso no storyboard. Encontre o controlador de visualização para o qual deseja voltar (aquele com o título longo), selecione seu Item de Navegação e abra o Inspetor de Atributos (Alt + Cmd + 4), insira o título do Botão Voltar personalizado.

insira a descrição da imagem aqui

Alyoka
fonte
Isso era exatamente o que eu precisava, já que queria que todos os botões de voltar tivessem o Texto "Voltar" em vez dos títulos de navegação do controlador anterior.
Dave
8
Apenas para observar, o texto do botão Voltar é definido na visualização da qual o próximo controlador foi empurrado, não no controlador de visualização que você mostrou atualmente.
Darbio
Esta é uma boa solução simples, mas por favor não vá renomear todos os seus botões de voltar para "Voltar", isso vai contra o HIG da Apple e anula parte do propósito de um botão de voltar. :(
Samuel Goodwin
Funcionou muito bem. Apenas certifique-se de SALVAR o arquivo do Storyboard. Minha primeira tentativa não funcionou porque não percebi que o Storyboard não havia salvo! E sim, você altera o botão BACK no controlador de visualização de onde está vindo!
EricWasTaken
Muito bem, mas e se eu quiser deixar apenas a seta, sem nenhum texto? :)
Iurii Vasylenko
40

Obrigado Marco ... isso me ajudou ...

Aqui está o que eu fiz.

Se você estiver usando um tableView para navegar para diferentes visualizações ... coloque o código:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

No seu didSelectRowAtIndexPathmétodo ... do primeiro Controlador ... Controlador A.

Quando você navegar para o Controlador B, o botão terá o título "Voltar".

Ben Call
fonte
1
Obrigado querido @Ben. Isso era exatamente o que eu estava procurando :).
Arslan
12

O botão Voltar puxa seu texto do título do controlador de visualização pai.

No controlador de visualização pai (o controlador de visualização que aparece quando você toca no botão Voltar), defina seu próprio título como o texto desejado no botão Voltar.

Por exemplo, digamos que temos uma RootViewControlleraula. Quando clicamos em uma célula em sua visualização de tabela, enviamos uma instância de SecondViewController. Queremos que o botão Voltar da SecondViewControllerinstância leia "Home".

no viewDidLoadmétodo de RootViewController.m :

self.title = @"Home";

no viewDidLoadmétodo de SecondViewController.m :

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];    

Se você quiser que o botão Voltar leia "Voltar", defina o título do controlador de visualização pai como @"Back";

Rose Perrone
fonte
10

Isso funciona melhor para mim. Experimentar :

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
Felipe FMMobile
fonte
1
Ótima resposta funcionou perfeitamente. deve ser marcado como exceção.
Muhammad Rizwan
9

Se você estiver usando o storyboard:

  1. Abra o StoryBoard
  2. Na janela Document Outline, encontre o ViewController para o qual deseja retornar
  3. Clique no item de navegação desse ViewController
  4. No explorador de atributos, altere o valor do botão Voltar para o bloco personalizado

É isso aí, aproveite ...

AntonijoDev
fonte
5

E no MonoTouch funciona o seguinte (em ViewDidLoad do controlador pai):

NavigationItem.BackBarButtonItem = new UIBarButtonItem( "Back", UIBarButtonItemStyle.Plain, null);
BillF
fonte
3
[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc]
  initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]];

Isso funcionou para mim.

user1004911
fonte
3

Em seu controlador de visualização pai, defina o botão Voltar quando a visualização for carregada:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    self.navigationItem.backBarButtonItem = 
       [[UIBarButtonItem alloc] initWithTitle:@"title" 
                                        style:UIBarButtonItemStylePlain 
                                       target:nil 
                                       action:nil];

}

Observe que não precisamos incluir autoreleaseno final com a versão mais recente do iOS.

Espero que isto ajude!

Zorayr
fonte
1

[self.navigationController.navigationBar.backItem setTitle:@"back"];

Funciona para mim. Você pode substituir "back" por outra coisa.

ohmer
fonte
Ao responder com código, sempre explique qual era o problema com o código fornecido e como seu código corrige o problema.
Lukas Knuth de
1

Este funcionou para mim, se você não quiser ter um título!

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStylePlain target:nil action:nil];
gpichler
fonte
1
self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
user2783798
fonte
0

Eu finalmente soube por que essas respostas não funcionaram para mim no início. Eu defino o título no storyboard. Quando eu defino o título no código. funciona!

self.navigationItem.title = @"Main Menu";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@" " style:UIBarButtonItemStyleBordered target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];
user2547667
fonte
No futuro, você pode querer fazer postagens como esta como comentários sobre a resposta que não funcionou para você.
Keith Smiley
0

Minha solução foi definir o título quando o controlador de visualização é empurrado para a pilha de navegação e redefini-lo usando o método delegado antes de fechar vc empurrado:

Então, coloquei a mudança de título na chamada do controlador de visualização quando pressiono o outro controlador de visualização como:

self.pushedVC = [self.storyboard instantiateViewControllerWithIdentifier:@"pushedVCIdentifier"];
self.pushedVC.delegate = self;   
[self.navigationController pushViewController:self.pushedVC animated:YES];
self.title = @"Back";

e na função de retorno de chamada delegada (que eu invoco em viewWillDissapear):

-(void)pushedVCWillClose:(PushedVC *)sender
{
    self.title = @"Previous Title";
}
Despotovic
fonte
0

Se você deseja não apenas alterar o texto do botão Voltar e manter a forma original da seta para a esquerda, mas também fazer algo quando o usuário clicar no botão Voltar, recomendo que você dê uma olhada em meu " CustomNavigationController ".

jianpx
fonte
0

// Você pode conseguir isso definindo o título no controlador de visualização anterior, conforme mostrado abaixo

override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for this view
        self.navigationItem.title = "My Title"

}

override func viewWillDisappear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for back button in next view 
        self.navigationItem.title = "Back"
}
John carto
fonte
0

Para alterar o título do botão Voltar, consulte o código abaixo

InformationVC *infoController=[[InformationVC alloc]init];[self.navigationController infoController animated:YES];

//Below code changed back button title on InformationVC page.
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Information" style: UIBarButtonItemStylePlain target: nil action: nil];
self.navigationItem.backBarButtonItem = backBarButton;`enter code here`
Kiran K
fonte
-1

Isso funcionou para mim:

self.navigationController.navigationBar.topItem.title = "Back"
Rochoso
fonte