Swift navega programaticamente para outro controlador de visualização / cena
navigation bar
. Como é que eu resolvo isto? (a barra de navegação é criada por incorporar o ViewController
No navigation controller
Se isso importa.)
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("nextView") as NextViewController
self.presentViewController(nextViewController, animated:true, completion:nil)
5 answers
Em Swift 3
Com um controlador criado programaticamente
Se quiser navegar para o controlador criado programaticamente, então faça isto:
let newViewController = NewViewController()
self.navigationController?.pushViewController(newViewController, animated: true)
Com um controlador criado por um StoryBoard
Se quiser navegar para o controlador no StoryBoard com o identificador "newViewController", então faça isto:
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "newViewController") as! NewViewController
self.present(newViewController, animated: true, completion: nil)
Você deve carregar no novo controlador de visualização usando o controlador de navegação actual, não presente.
self.navigationController.pushViewController(nextViewController, animated: true)
Por isso, se apresentar um controlador de vista, este não aparecerá no controlador de navegação. Só vai precisar de uma tela completa. Para este caso, terá de criar outro controlador de navegação e adicionar o seu nextViewController
como root para isto e apresentar este novo controlador de navegação.
self.presentViewController(nextViewController, animated:true, completion:nil)
Para mais informações, verifique a documentação da Apple:- https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/doc/uid/TP40006926-CH3-SW96
De acordo com @jaiswal Rajan em a sua resposta. Você pode fazer um pushViewController como este:
let storyBoard: UIStoryboard = UIStoryboard(name: "NewBotStoryboard", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "NewViewController") as! NewViewController
self.navigationController?.pushViewController(newViewController, animated: true)
OperationQueue.main.addOperation {
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "Storyboard ID") as! NewViewController
self.present(newViewController, animated: true, completion: nil)
}
Funcionou comigo a pôr dentro da lista de operações.principal.adicionar uma operação que será executada no tópico principal