Swift navega programaticamente para outro controlador de visualização / cena

Estou a usar o seguinte código para navegar programaticamente para outro controlador de visualização. Funciona bem, mas em parte esconde o 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)
Author: rmaddy, 2016-09-12

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)
 84
Author: jaiswal Rajan, 2018-08-10 06:01:06

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)
 11
Author: ocanal, 2016-09-12 12:26:55

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.

Outra maneira é carregar no controlador de visualizaçã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

 3
Author: Aks, 2016-09-12 12:27:25

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)
 1
Author: LagMaster, 2018-07-11 17:19:49
        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
 -2
Author: Pedro Berbel, 2017-03-08 17:35:15