J'ai reçu un message d'erreur lors de la navigation du premier contrôleur de vue au 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 eu 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 </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)
J'ai déjà trouvé la réponse
Swift 4
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "nextView") as! NextViewController
self.present(nextViewController, animated:true, completion:nil)
Swift 3
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 l'ID de storyboard 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 exist UIViewController
let loginVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
self.present(loginVC, animated: true, completion: nil)
Poussez un exist UIViewController
let loginVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
self.navigationController?.pushViewController(loginVC, animated: true)
Rappelez-vous que vous pouvez mettre l'identificateur UIViewController
en suivant les étapes suivantes:
Main.storyboard
UIViewController
UIViewController
Si vous souhaitez accéder au contrôleur créé par programme, procédez comme suit:
let newViewController = NewViewController()
self.navigationController?.pushViewController(newViewController, animated: true)
Si vous souhaitez accéder à Controller sur StoryBoard avec l'identificateur "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)
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éfini.
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 plume avec représentation du storyboard.
Vous pouvez passer d'une scène à une autre par programme 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)
StoryBoardID est ici la valeur que vous définissez pour la scène à l'aide d'Interface Builder. Ceci est montré ci-dessous:
Programmatiquement, il y a différentes manières basées sur différentes situations
charge le fichier nib du fichier storyboard
let yourVc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "YourViewController") as! YourViewController self.present(yourVc, animated: true, completion: nil)
Charger à partir de xib
let yourVc = YourViewController.init(nibName: "YourViewController", bundle: nil) self.present(yourVc, animated: true, completion: nil)
Naviguer dans Segue
self.performSegue(withIdentifier: "your UIView", sender: self)
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 transition
.
N'oubliez pas de définir votre storyboard aussi. Votre besoin d'avoir une vue par viewController. Connectez chaque ViewController à chaque vue de storyBoard. Vous pouvez voir sur la capture d'écran ci-dessous
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 naviguer entre les contrôleurs de vue à l'aide de code à l'aide du storyboard et de 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)
XCODE 9.2 ET Swift 3.0
ViewController
à NextViewcontroller
sans connexion de séquence
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)
Si vous construisez une interface utilisateur sans glisser-déposer (sans utiliser de scénarimage) et souhaitez naviguer dans la 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) Ici, 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: une scène avec une flèche, sélectionnez cette flèche et appuyez sur le bouton de suppression.
maintenant, faites glisser un contrôleur de navigation et supprimez la tableview fournie avec le contrôleur navaigation. sélectionnez navigationcontroller, appuyez sur les touches de contrôle du clavier et faites-les glisser vers une autre scène du scénario, ViewController. Cela signifie que votre contrôleur de vue devient le contrôleur principal. Nous espérons que cela vous aidera. Merci dans main.storyboard, faites glisser et déposez navigationcontroller,
Swift 4.0.
@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)
}
Changer notre nom de contrôleur RegisterNewUserViewController
En plus des 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'ajouter à 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
}
Je ne suis pas sûr d'essayer les étapes ci-dessous, je pense qu'une erreur peut se produire sous les raisons.
let signUpVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SignUp")
// self.present(signUpVC, animated: false, completion: nil)
self.navigationController?.pushViewController(signUpVC, animated: true)