Estou tentando descartar um ViewController rapidamente, chamando dismissViewController
umIBAction
@IBAction func cancel(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("cancel")
}
@IBAction func done(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("done")
}
Eu pude ver a mensagem println na saída do console, mas o ViewController nunca é descartado. Qual poderia ser o problema?
ios
swift
viewcontroller
rshankar
fonte
fonte
Respostas:
Pela sua imagem, parece que você apresentou o ViewController usando push
O
dismissViewControllerAnimated
é usado para fechar os ViewControllers apresentados usando modalSwift 2
Swift 4
fonte
Eu tenho uma solução para o seu problema. Por favor, tente este código para descartar o controlador de exibição se você apresentar a exibição usando modal:
Swift 3:
OU
Se você apresentar a visualização usando "push" segue
fonte
se você fizer isso, acho que você pode não receber a mensagem println no console,
fonte
No Swift 3.0 a 4.0, é tão fácil quanto digitar isso em sua função:
Ou, se você estiver em um controlador de navegação, poderá "pop-lo":
fonte
adicione esta linha entre parênteses:
fonte
Usar:
ao invés de:
fonte
Se você apresentar um controlador sem um Controlador de Navegação, poderá chamar o código a seguir a partir de um método do controlador apresentado.
Se o seu ViewController for apresentado de forma modal, o opcional PresentationViewController não será nulo e o código será executado.
fonte
Com base na minha experiência, adiciono um método para me dispensar como extensão ao UIViewController:
Então eu chamo esse método para descartar o view controller em qualquer
UIViewController
subclasse. Por exemplo, na ação cancelar:fonte
Das documentações da Apple :
Portanto, é uma prática ruim invocar apenas o método de dispensa .
O que você deve fazer se estiver apresentando o modal é:
fonte
Não crie nenhuma sequência de Cancelar ou Concluído para outro VC e apenas escreva esse código nos seus botões @IBAction
fonte
Aqui está a única maneira de descartar o controlador de exibição atual e voltar ao controlador de exibição anterior. Você pode fazer isso apenas através do Storyboard.
Por favor, tente isso, está trabalhando comigo.
Segunda Via - Uso -
navigationController.popViewControllerAnimated(true)
Boa sorte..
fonte
Para referência, lembre-se de que você pode estar dispensando o controlador de exibição errado. Por exemplo, se você tem uma caixa de alerta ou modal sendo exibido em cima de outro modal. (Você pode exibir um alerta de postagem no Twitter sobre o alerta modal atual, por exemplo). Nesse caso, você precisa ligar para dispensar duas vezes ou usar um segue para descontrair.
fonte
Se você estiver apresentando um ViewController de forma modal e quiser voltar ao ViewController raiz, descarte esse ViewController apresentado antes de voltar ao ViewController raiz, caso contrário, esse ViewController não será removido da memória e causará vazamentos de memória.
fonte
No Swift 3.0
Se você deseja descartar um controlador de exibição apresentado
fonte
No Swift 4.1 e no Xcode 9.4.1
Se você usar o pushViewController para apresentar o novo controlador de exibição, use este
fonte
Tente o seguinte:
fonte
Este código escrito na ação do botão para descartar
fonte
fonte
Se você estiver usando o método presente no VC pai, deverá chamar esta função, para descartar o VC filho, use este
se você chamar o VC filho usando o método push, para descartar o VC filho, use este
fonte