Chame programaticamente o botão Voltar do controlador de navegação no iOS

85

Em um aplicativo para iPhone baseado em UINavigationController, em um método, eu gostaria de realizar o equivalente programático de pressionar o botão Voltar e voltar uma visualização.

ou seja, pressione automaticamente o botão Trabalhos como visto aqui:

Imagem do controlador de navegação

Posso fazer uma chamada genérica do iOS ou são necessárias mais informações?

Oberbaum
fonte

Respostas:

189

UINavigationControllerO -popViewControllerAnimated:método de deve fazer o que você quiser:

[navigationController popViewControllerAnimated:YES];
Steve Harrison
fonte
12
incrível, graças a Steve e Niels. A solução que usei foi [self.navigationController popViewControllerAnimated: YES]; fácil;)
oberbaum
isso funciona muito bem, exceto os controladores de visualização adicionados ao uitabbar. alguma pista ??
virata
1
Eu adicionei, [self.navigationController popViewControllerAnimated:YES];mas não faz nada, no entanto, há um alerta ao gravar esse botão que está funcionando.
mohsin.mr
Hmm, recebo uma tela em branco, um aplicativo que não responde e o seguinte no console: "Concluindo uma transição de navegação em um estado inesperado. A árvore de subvisualização da barra de navegação pode ser corrompida."
Kurt
24

Assumindo que você não deseja PRESSIONAR o botão programaticamente, mas simplesmente copiar o resultado de pressionar o botão, você deve dizer ao controlador de navegação para abrir o controlador de visualização atual.

[self.navigationController popViewControllerAnimated:YES];

Isso o removerá da pilha e o levará de volta ao controlador de visualização anterior.

Kevin Elliott
fonte
21

Swift 3.0

Voltar para a visão raiz

self.navigationController?.popToRootViewController(animated: true)

Voltar para a vista anterior

self.navigationController?.popViewController(animated: true)

Swift 2.3

Voltar para a visão raiz

self.navigationController?.popToRootViewControllerAnimated(true)

Voltar para a vista anterior

self.navigationController?.popViewControllerAnimated(true)
Tal Zion
fonte
7

Você deveria ligar

popViewControllerAnimated:

que é o oposto de adicionar controladores de visualização com pushViewController:animated:

Castelo niels
fonte
6
[self.navigationController popViewControllerAnimates:YES];

é a melhor opção, mas se você não estiver na mesma classe do controlador de visualização ou se o seu delegado mudar antes de o método do botão Voltar ser chamado, você também pode tentar -

primeiro você deve definir o botão Voltar ---

UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle: @"anyTitleForBackButton" style: UIBarButtonItemStyleBordered target: nil action: @selector(backButtonTapped)];

[[self navigationItem] setBackBarButtonItem: newBackButton];

[newBackButton release];

e então no método backButtonTapped você pode chamar -

[self.navigationController pushViewController:desiredViewController animated:YES];
Nishant Mahajan
fonte