Navega programáticamente a otra vista controlador / escena

Recibí un mensaje de error durante la navegación desde el controlador de la primera vista hasta el controlador de la segunda vista. Mi encoding es como esta

let vc = LoginViewController(nibName: "LoginViewController", bundle: nil) self.navigationController?.pushViewController(vc, animated: true) 

El problema es que siempre tengo este tipo de mensaje de error

 2014-12-09 16:51:08.219 XXXXX[1351:60b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle  (loaded)' with name 'LoginViewController'' *** First throw call stack: (0x2efcaf0b 0x39761ce7 0x2efcae4d 0x31b693f9 0x31ac1eaf 0x3191e365 0x317fe895 0x318a930d 0x318a9223 0x318a8801 0x318a8529 0x318a8299 0x318a8231 0x317fa305 0x3147631b 0x31471b3f 0x314719d1 0x314713e5 0x314711f7 0x3146af1d 0x2ef96039 0x2ef939c7 0x2ef93d13 0x2eefe769 0x2eefe54b 0x33e6b6d3 0x3185d891 0x4ccc8 0x4cd04 0x39c5fab7) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb) 

Ya encontré la respuesta

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

Prueba este. Aquí “LoginViewController” es el storyboardID especificado en el guión gráfico.

Vea abajo

 let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as LoginViewController self.navigationController?.pushViewController(secondViewController, animated: true) 

XCODE 8.2 Y SWIFT 3.0

Presentar un UIViewController existente

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

Empujar un UIViewController existente

 let loginVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController self.navigationController?.pushViewController(loginVC, animated: true) 

Recuerde que puede poner el identificador UIViewController siguiendo los siguientes pasos:

  • Seleccione Main.storyboard
  • Seleccione su UIViewController
  • Busque las Utilidades en la derecha
  • Seleccione el inspector de identidad
  • Buscar en la sección de identidad “ID del guión gráfico”
  • Pon el identificador para tu UIViewController

enter image description here

Mira el mio.

 func actioncall () { let loginPageView = self.storyboard?.instantiateViewControllerWithIdentifier("LoginPageID") as! ViewController self.navigationController?.pushViewController(loginPageView, animated: true) } 

Si usa el estilo de presentación, es posible que pierda la barra de navegación de la página con navegación fija preestablecida.

Puede pasar de una escena a otra programáticamente usando el siguiente código:

  let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) let objSomeViewController = storyBoard.instantiateViewControllerWithIdentifier(“storyboardID”) as! SomeViewController // If you want to push to new ViewController then use this self.navigationController?.pushViewController(objSomeViewController, animated: true) // ---- OR ---- // If you want to present the new ViewController then use this self.presentViewController(objSomeViewController, animated:true, completion:nil) 

Aquí storyBoardID es el valor que establece en escena usando Interface Builder. Esto se muestra a continuación:

Captura de pantalla de cómo configurar storyboardID

Si desea navegar a Controlador creado mediante progtwigción, haga esto:

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

Si desea navegar a Controller en StoryBoard con el identificador “newViewController”, haga lo siguiente:

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

Swift3:

 let storyboard = UIStoryboard(name: "Main", bundle: nil) let vc = storyboard.instantiateViewController("LoginViewController) as UIViewController self.navigationController?.pushViewController(vc, animated: true) 

Probar esto. Acabas de confundir el plumín con la representación del guión gráfico.

 let VC1 = self.storyboard!.instantiateViewController(withIdentifier: "MyCustomViewController") as! ViewController let navController = UINavigationController(rootViewController: VC1) self.present(navController, animated:true, completion: nil) 

Te doy mi código para hacer una transición. En este ejemplo, la acción se conecta a un UIButton. Así que no te olvides de configurarlo. No olvide configurar el nombre de su ViewController en el método de transition .

No te olvides de configurar tu guión gráfico también. Tu necesidad de tener una vista por viewController. Conecte cada ViewController a cada vista en StoryBoard. Puedes ver en la captura de pantalla abajo

enter image description hereenter image description here

 class PresentationViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() var playButton = UIButton.buttonWithType(UIButtonType.System) as UIButton let image = UIImage(named: "YourPlayButton") as UIImage? playButton.frame = CGRectMake(0, 0, 100, 100) playButton.center = CGPointMake(self.view.frame.width/2, self.view.frame.height/2) playButton.addTarget(self, action: "transition:", forControlEvents: UIControlEvents.TouchUpInside) playButton.setBackgroundImage(image, forState: UIControlState.Normal) self.view.addSubview(playButton) } func transition(sender:UIButton!) { println("transition") let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("YourSecondViewController") as UIViewController let window = UIApplication.sharedApplication().windows[0] as UIWindow UIView.transitionFromView( window.rootViewController!.view, toView: secondViewController.view, duration: 0.65, options: .TransitionCrossDissolve, completion: { finished in window.rootViewController = secondViewController }) } } 

Puede hacer la navegación entre los controladores de vista usando código con la ayuda del guión gráfico y el guión gráfico del controlador de vista. Este código es para Swift 3:

 let signUpVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SignUp") self.navigationController?.pushViewController(signUpVC, animated: true) 

No estoy seguro de intentar a continuación los pasos, creo que puede ser el error se produce a continuación.

  • cambia el nombre de algunos archivos fuera de XCode. Para resolverlo, elimine los archivos de su proyecto y vuelva a importar los archivos en su proyecto.
  • compruebe y agregue el archivo Nib que falta en las fases de comstackción-> Copie los recursos del paquete. Finalmente, verifique la ortografía del nombre de la stack, es correcto, distingue entre mayúsculas y minúsculas.
  • verifique las propiedades de los archivos .xib / storyboard en el inspector de archivos , el campo ” Membresía objective ” de la propiedad en el cuadro de selección, luego su archivo xib / guión gráfico se vinculó con su objective.
  • como el tipo incorrecto de NIB. Haga clic derecho en el archivo y haga clic en “Obtener información” para verificar que el tipo es lo que usted esperaría.

Si está comstackndo UI sin arrastrar y soltar (sin usar el guión gráfico) y desea navegar por la página predeterminada o ViewController.swift a otra página? Sigue estos pasos 1) agrega una clase (.swift) 2) Importar UIKit 3) Declara el nombre de la clase como

 class DemoNavigationClass :UIViewController{ override func viewDidLoad(){ let lbl_Hello = UILabel(frame: CGRect(x:self.view.frame.width/3, y:self.view.frame.height/2, 200, 30)); lbl_Hello.text = "You are on Next Page" lbl_Hello.textColor = UIColor.white self.view.addSubview(lbl_Hello) } } 

después de crear la segunda página regrese a la primera página (ViewController.swift) Aquí haga un botón en el método viewDidLoad

 let button = UIButton() button.frame = (frame: CGRect(x: self.view.frame.width/3, y: self.view.frame.height/1.5, width: 200, height: 50)) button.backgroundColor = UIColor.red button.setTitle("Go to Next ", for: .normal) button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside) self.view.addSubview(button) 

ahora define el método ButtonAction fuera de viewDidLoad () en la misma clase

 func buttonAction(sender: UIButton!) { let obj : DemoNavigationClass = DemoNavigationClass(); self.navigationController?.pushViewController(obj, animated: true) } 

Mantenga una cosa que olvide en main.storyboard hay una escena con una flecha, seleccione esa flecha y presione el botón eliminar

ahora arrastra y suelta un control de navegación y elimina la vista de tabla que viene con el controlador de navegación. seleccione navigationcontroller presione control en el teclado y arrástrelo a otra escena en el guión gráfico ViewController. Esto significa que su viewcontroller se convertirá en el controlador de visualización de la raíz. Espero que esto lo ayude. Gracias en main.storyboard, arrastre y suelte el control de navegación,

 let signUpVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SignUp") // self.present(signUpVC, animated: false, completion: nil) self.navigationController?.pushViewController(signUpVC, animated: true) 

Además de las buenas respuestas anteriores para configurar el controlador de vista de navegación en la parte superior de la pantalla en su aplicación, puede agregarlo a su archivo AppDelegate.swift dentro del bloque de la siguiente manera

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { window = UIWindow() window?.makeKeyAndVisible() window?.rootViewController = UINavigationController(rootViewController: LoginViewController()) return true } 

Swift 4.0.3

  @IBAction func registerNewUserButtonTapped(_ sender: Any) { print("---------------------------registerNewUserButtonTapped --------------------------- "); let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) let nextViewController = storyBoard.instantiateViewController(withIdentifier: "RegisterNewUserViewController") as! RegisterNewUserViewController self.present(nextViewController, animated:true, completion:nil) } 

Cambiar nuestro nombre de controlador RegisterNewUserViewController

XCODE 9.2 Y SWIFT 3.0

ViewController a NextViewcontroller sin conexión Segue

 let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) let nextViewController = storyBoard.instantiateViewController(withIdentifier: "NextViewController") as! NextViewController self.navigationController?.pushViewController(nextViewController, animated:true) 

o

 let VC:NextViewController = storyboard?.instantiateViewController(withIdentifier: "NextViewController") as! NextViewController self.navigationController?.pushViewController(VC, animated: true)