Eu tenho uma pilha de navegação, digamos 5 UIViewControllers. Quero remover o terceiro e o quarto viewcontrollers da pilha com o clique de um botão no quinto viewcontroller. É possível fazer isso? Se sim, como?
iphone
ios
uiviewcontroller
uinavigationcontroller
Jean Paul Scott
fonte
fonte
Você pode primeiro obter todos os controladores de visualização no array e, em seguida, após verificar com a classe de controlador de visualização correspondente, você pode excluir aquele que deseja.
Aqui está um pequeno trecho de código:
Acho que isso vai facilitar o seu trabalho.
fonte
Swift 3 e 4/5
self.navigationController!.viewControllers.removeAll()
self.navigationController?.viewControllers.remove(at: "insert here a number")
Swift 2.1
deletar tudo:
self.navigationController!.viewControllers.removeAll()
remover no índice
self.navigationController?.viewControllers.removeAtIndex("insert here a number")
Existem várias outras ações possíveis, como removeFirst, range, etc.
fonte
Swift 5:
fonte
return !vc.isKind(of: MyViewController.self) && !vc.isKind(of: MyViewController2.self)
faria o trabalho em uma linha :-)Usar a
setViewControllers
função deUINavigationController
é a melhor maneira. Também existe umanimated
parâmetro para habilitar a animação.Exemplo rápido para perguntas
Tentei outras maneiras como
[tempVC removeFromParentViewController];
. Isso causou um comportamento estranho, removeu a navegação do ViewController que ainda aparece quando volta, como relatado por @ robin-ellerkmannfonte
setViewControllers(_:animated:)
técnica das duas maneiras: para ativar vários controladores e enviar vários controladores.Swift 2.0:
fonte
if var navArray = ... { ... }
Swift 5, Xcode 11.3
Achei essa abordagem simples ao especificar quais controladores de visualização você deseja remover da pilha de navegação.
Exemplo de uso:
fonte
Se você está tentando mover para o 2º controlador de visualização do 5º controlador de visualização (pulando o 3º e 4º), você gostaria de usar
[self.navigationController popToviewController:secondViewController]
.Você pode obter o
secondViewController
da pilha do controlador de navegação.fonte
Usa isto
Ele cuidará dos ViewControllers de navigationController. viewControllers e também um navigationItems empilhados em navigationBar.
Nota: Certifique-se de chamá-lo pelo menos após viewDidAppear
fonte
Esta solução funcionou para mim no swift 4:
o índice do controlador de visão atual na pilha é:
fonte
Swift 5.1, Xcode 11
Certifique-se de chamar esta função de utilitário após viewDidDisappear () do controlador anterior ou viewDidAppear () do novo controlador
fonte
Detalhes
Solução
Uso
Amostra Completa
Resultado
fonte
Eu escrevi uma extensão com método que remove todos os controladores entre root e top, a menos que especificado de outra forma.
}
Se você quiser usar intervalo (por exemplo: 2 a 5), você pode apenas usar
Testado em iOS 12.2, Swift 5
fonte
// removendo os controladores de visualização por nomes de classe da pilha e, em seguida, descartando a visualização atual.
fonte