Swift: navegar mediante progtwigción a otro controller / escena de vista

Recibí un post de error durante la navigation desde el controller de la primera vista al controller 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 recibí este tipo de post 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 </var/mobile/Applications/FDC7AA0A-4F61-47E7-955B-EE559ECC06A2/XXXXX.app> (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) 

Por favor aconséjame

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 esta. 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

Presente un UIViewController existente

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

Empuje 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
  • Busca en las Utilidades de la derecha
  • Seleccione el inspector de identidad
  • Buscar en la identidad de la sección "ID del guión gráfico"
  • Coloque el identificador para su UIViewController

introduzca la descripción de la imagen aquí

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 navigation de la página con la function de envío de posts pnetworkingefinida.

Puede moverse de una escena a otra mediante progtwigción utilizando el código siguiente:

  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 un valor que configuró en escena usando Interface Builder. Esto se muestra a continuación:

Captura de pantalla sobre 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 esto:

 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. Simplemente confundiste la punta con la representación de storyboard.

Te doy mi código para hacer una transición. En este ejemplo, la acción se conecta a un button UIB. Entonces, 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. Su necesidad de tener una vista por viewController. Conecta cada ViewController a cada vista en storyboard. Puedes ver en la pantalla de abajo

introduzca la descripción de la imagen aquíintroduzca la descripción de la imagen aquí

 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.shanetworkingApplication().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 navigation entre los controlleres de vista usando el código con la ayuda de storyboard y storyboardId del controller 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) 
 let VC1 = self.storyboard!.instantiateViewController(withIdentifier: "MyCustomViewController") as! ViewController let navController = UINavigationController(rootViewController: VC1) self.present(navController, animated:true, completion: nil) 

No estoy seguro de probar los siguientes pasos, creo que puede haber un error por debajo de los motivos.

  • cambia el nombre de algunos files fuera de XCode. Para resolverlo, elimine los files de su proyecto y vuelva a importar los files en su proyecto.
  • compruebe y agregue el file Nib faltante en las fases de compilation-> Copie los resources del package. Finalmente, verifique la ortografía del nombre del nib, es correcto, distingue entre mayúsculas y minúsculas.
  • verifique las properties de los files .xib / storyboard en el inspector de files , el atributo " Membresía de destino " en el cuadro de selección, luego su file xib / storyboard se vinculaba con su objective.
  • como el tipo incorrecto de NIB. Haga clic derecho en el file y click "Obtener información" para verificar que el tipo es lo que espera.

Si está creando UI sin drag and drop (sin usar storyboard) y quiere navegar por la página pnetworkingeterminada o ViewController.swift a otra página? Siga estos pasos 1) agregue una class (.swift) 2) Importe UIKit 3) Declare el nombre de la class 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 vuelva a la primera página (ViewController.swift) Aquí click el button 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.networking button.setTitle("Go to Next ", for: .normal) button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside) self.view.addSubview(button) 

ahora defina el método buttonAction fuera de viewDidLoad () en la misma class

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

Mantenga una cosa que me olvide en main.storyboard hay una escena con una flecha, select esa flecha y presione el button Eliminar

ahora arrastre y suelte un control de navigation y elimine la vista de tabla que viene con el controller de navigation. select control del browser para presionar el control del keyboard y arrástrelo a otra escena en el guión gráfico que es ViewController. Esto significa que su viewcontroller se convierta en root viewcontroller Espero que esto lo ayude Gracias en main.storyboard, arrastre y suelte navigationcontroller,

 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 controller de vista de navigation en la parte superior de la pantalla de la aplicación, puede agregarlo a su file 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 }