Naviguer par programme vers une autre vue contrôleur / scène

J’ai reçu un message d’erreur lors de la navigation du premier contrôleur de vue vers le second contrôleur de vue. Mon codage est comme celui-ci

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

Le problème est que j’ai toujours ce genre de message d’erreur

 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) 

J’ai déjà trouvé la réponse

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

Essaye celui-là. Ici, “LoginViewController” est le storyboardID spécifié dans le storyboard.

Voir ci-dessous

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

XCODE 8.2 ET SWIFT 3.0

Présenter un existentiel UIViewController

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

Push an exist UIViewController

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

N’oubliez pas que vous pouvez mettre l’identificateur UIViewController suivant les étapes suivantes:

  • Sélectionnez Main.storyboard
  • Sélectionnez votre UIViewController
  • Rechercher les utilitaires à droite
  • Sélectionnez l’inspecteur d’identité
  • Recherche dans l’identité de la section “ID Storyboard”
  • Placez l’identifiant de votre UIViewController

entrer la description de l'image ici

Voir le mien

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

Si vous utilisez le style de présentation, vous risquez de perdre la barre de navigation de la page avec pushnavigation prédéfinie.

Vous pouvez passer d’une scène à une autre par programmation en utilisant le code ci-dessous:

  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) 

Ici, storyBoardID est la valeur que vous définissez sur scène à l’aide d’Interface Builder. Ceci est montré ci-dessous:

Capture d'écran de la configuration de storyboardID

Si vous souhaitez accéder à Controller créé par programme, procédez comme suit:

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

Si vous souhaitez accéder à Controller on StoryBoard avec l’identifiant “newViewController”, procédez comme suit:

 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) 

Essayez ceci. Vous venez de confondre nib avec la représentation de storyboard.

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

Je vous donne mon code pour faire une transition. Dans cet exemple, l’action se connecte à un UIButton. Alors n’oubliez pas de le définir. N’oubliez pas de définir le nom de votre ViewController dans la méthode de transition .

N’oubliez pas de définir votre storyboard aussi. Vous devez avoir une vue par viewController. Connectez chaque ViewController à chaque vue de storyBoard. Vous pouvez voir sur l’écran ci-dessous

entrer la description de l'image icientrer la description de l'image ici

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

Vous pouvez faire la navigation entre les contrôleurs de vue à l’aide du code à l’aide du storyboard et du storyboardId du contrôleur de vue. Ce code est pour Swift 3:

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

Je ne suis pas sûr d’essayer les étapes ci-dessous, je pense que l’erreur peut se produire sous les raisons.

  • vous renommez certains fichiers en dehors de XCode. Pour le résoudre, supprimez les fichiers de votre projet et réimportez les fichiers dans votre projet.
  • vérifiez et ajoutez le fichier Nib manquant dans les phases de construction-> Copier les ressources de l’ensemble .
  • Vérifiez les propriétés des fichiers .xib / storyboard dans l’ inspecteur de fichiers property la propriété “pitch membership ” dans la zone de sélection, puis votre fichier xib / storyboard est lié à votre cible.
  • Cliquez sur le fichier et cliquez sur “Obtenir des informations” pour vérifier que le type correspond à ce que vous attendez.

Si vous créez une interface utilisateur sans glisser-déposer (sans utiliser de storyboard) et que vous souhaitez naviguer sur une page par défaut ou ViewController.swift vers une autre page? Suivez ces étapes 1) ajoutez une classe (.swift) 2) importez UIKit 3) déclarez le nom de la classe comme

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

Après avoir créé la deuxième page, revenez à la première page (ViewController.swift). Créez un bouton dans la méthode 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) 

maintenant définir la méthode buttonAction en dehors de viewDidLoad () dans la même classe

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

Gardez une chose que j’oublie dans main.storyboard il y a une scène avec une flèche, sélectionnez cette flèche et appuyez sur le bouton supprimer

glissez-déposez maintenant un contrôleur de navigation et supprimez la tableview fournie avec le contrôleur de navigation. Sélectionnez navigationcontroller appuyez sur control sur le clavier et faites-le glisser dans une autre scène du storyboard qu’est ViewController. Cela signifie que votre viewcontroller deviendra root viewcontroller en espérant que cela vous aidera Merci à main.storyboard, glisser et déposer le contrôleur de navigation,

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

Outre les bonnes réponses ci-dessus pour définir le contrôleur de vue de navigation en haut de votre écran sur votre application, vous pouvez l’append à votre fichier AppDelegate.swift à l’intérieur du bloc comme suit:

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

Changez notre nom de contrôleur RegisterNewUserViewController

XCODE 9.2 et SWIFT 3.0

ViewController vers NextViewcontroller sans connexion Segue

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

ou

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