pasar otro open change ios swift uinavigationbar viewcontroller

ios - otro - push view controller swift 4



Swift navega programáticamente a otro controlador de vista/escena (6)

Debe empujar el nuevo controlador de vista utilizando el controlador de navegación actual, no presente.

self.navigationController.pushViewController(nextViewController, animated: true)

Estoy usando el siguiente código para navegar programáticamente a otro ViewController. Funciona bien, pero de alguna manera oculta la navigation bar . ¿Cómo puedo solucionar esto? (la barra de navegación se crea incrustando el ViewController en el navigation controller si eso es importante).

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("nextView") as NextViewController self.presentViewController(nextViewController, animated:true, completion:nil)


Entonces, si presenta un controlador de vista, no se mostrará en el controlador de navegación. Solo tomará la pantalla completa. Para este caso, debe crear otro controlador de navegación y agregar su nextViewController como raíz para esto y presentar este nuevo navigationController.

Otra forma es simplemente presionar el controlador de vista.

self.presentViewController(nextViewController, animated:true, completion:nil)

Para obtener más información, consulte la documentación de Apple: - https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/doc/uid/TP40006926-CH3-SW96


Según @jaiswal Rajan en share . Puede hacer un 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)


En Swift 3

Con un controlador creado mediante programación

Si desea navegar al controlador creado mediante programación, haga esto:

let newViewController = NewViewController() self.navigationController?.pushViewController(newViewController, animated: true)

Con un controlador creado por StoryBoard

Si desea navegar al controlador en StoryBoard con el identificador "newViewController", haga esto:

let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let newViewController = storyBoard.instantiateViewController(withIdentifier: "newViewController") as! NewViewController self.present(newViewController, animated: true, completion: nil)


SWIFT 4.x

Las cadenas entre comillas dobles siempre me confunden, por lo que creo que la respuesta a esta pregunta necesita una presentación gráfica para aclarar esto.

Para una aplicación bancaria, tengo un LoginViewController y un BalanceViewController. Cada uno tiene sus respectivas pantallas.

La aplicación se inicia y muestra la pantalla de inicio de sesión. Cuando el inicio de sesión es exitoso, la aplicación abre la pantalla Balance.

Así es como se ve:

El éxito de inicio de sesión se maneja así:

let storyBoard: UIStoryboard = UIStoryboard(name: "Balance", bundle: nil) let balanceViewController = storyBoard.instantiateViewController(withIdentifier: "balance") as! BalanceViewController self.present(balanceViewController, animated: true, completion: nil)

Como puede ver, el ''equilibrio'' de la ID del guión gráfico en letras pequeñas es lo que va en la segunda línea del código, y esta es la ID que se define en la configuración del guión gráfico, como en la captura de pantalla adjunta.

El término ''Balance'' con ''B'' mayúscula es el nombre del archivo del guión gráfico , que se utiliza en la primera línea del código.

Sabemos que usar cadenas codificadas en el código es una práctica muy mala, pero de alguna manera en el desarrollo de iOS se ha convertido en una práctica común, y Xcode ni siquiera advierte sobre ellas.


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) }

Funcionó para mí cuando puse el código dentro de OperationQueue.main.addOperation , que se ejecutará en el hilo principal para mí.