Beim Navigieren vom First View Controller zum Second View Controller wurde eine Fehlermeldung angezeigt. Meine Codierung ist wie diese
let vc = LoginViewController(nibName: "LoginViewController", bundle: nil)
self.navigationController?.pushViewController(vc, animated: true)
Das Problem ist, dass ich immer diese Art von Fehlermeldung habe
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)
ios
swift
uiviewcontroller
uinavigationcontroller
xcode6
Mohammad Nurdin
quelle
quelle
LoginViewController.xib
Ihrem Projekt eine Datei hinzufügen .LoginViewController.swift
Stellen Sie beim Erstellen sicher, dass include xib ausgewählt ist.LoginViewController
und prüfen Sie, ob er funktioniert.Antworten:
Ich habe die Antwort bereits gefunden
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)
quelle
self.navigationController?.pushViewController(nextViewController, animated: true)
Probier diese. Hier ist "LoginViewController" die im Storyboard angegebene Storyboard-ID.
Siehe unten
let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as LoginViewController self.navigationController?.pushViewController(secondViewController, animated: true)
quelle
XCODE 8.2 UND SWIFT 3.0
Präsentieren Sie eine Existenz
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)
Denken Sie daran, dass Sie den
UIViewController
Bezeichner folgendermaßen eingeben können:Main.storyboard
UIViewController
UIViewController
quelle
Wenn Sie zu einem programmgesteuert erstellten Controller navigieren möchten, gehen Sie folgendermaßen vor:
let newViewController = NewViewController() self.navigationController?.pushViewController(newViewController, animated: true)
Wenn Sie mit dem Bezeichner "newViewController" zu Controller auf StoryBoard navigieren möchten, gehen Sie folgendermaßen vor:
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let newViewController = storyBoard.instantiateViewController(withIdentifier: "newViewController") as! NewViewController self.present(newViewController, animated: true, completion: nil)
quelle
Siehe meine.
func actioncall () { let loginPageView = self.storyboard?.instantiateViewControllerWithIdentifier("LoginPageID") as! ViewController self.navigationController?.pushViewController(loginPageView, animated: true) }
Wenn Sie den Präsentationsstil verwenden, verlieren Sie möglicherweise die Navigationsleiste der Seite mit der voreingestellten Pushnavigation.
quelle
Sie können programmgesteuert mit dem folgenden Code von einer Szene zur nächsten wechseln:
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)
Hier ist storyBoardID ein Wert, den Sie mit Interface Builder auf Szene setzen. Dies ist unten gezeigt:
quelle
Swift3:
let storyboard = UIStoryboard(name: "Main", bundle: nil) let vc = storyboard.instantiateViewController("LoginViewController") as UIViewController self.navigationController?.pushViewController(vc, animated: true)
Probieren Sie es aus. Sie haben gerade Feder mit Storyboard-Darstellung verwechselt.
quelle
Programmatisch gibt es verschiedene Möglichkeiten, die auf unterschiedlichen Situationen basieren
Laden Sie den Storyenter-Code in die Nib-Datei
let yourVc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "YourViewController") as! YourViewController; self.present(yourVc, animated: true, completion: nil)
Laden von xib
let yourVc = YourViewController.init(nibName: "YourViewController", bundle: nil) self.present(yourVc, animated: true, completion: nil)
Navigieren Sie durch Segue
self.performSegue(withIdentifier: "your UIView", sender: self)
quelle
let VC1 = self.storyboard!.instantiateViewController(withIdentifier: "MyCustomViewController") as! ViewController let navController = UINavigationController(rootViewController: VC1) self.present(navController, animated:true, completion: nil)
quelle
Sie können mithilfe von Storyboard und StoryboardId des View Controllers mithilfe von Code zwischen Ansichts-Controllern navigieren. Dieser Code ist für Swift 3:
let signUpVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SignUp") self.navigationController?.pushViewController(signUpVC, animated: true)
quelle
XCODE 9.2 UND SWIFT 3.0
ViewController
bisNextViewcontroller
ohne Segue-Verbindunglet storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) let nextViewController = storyBoard.instantiateViewController(withIdentifier: "NextViewController") as! NextViewController self.navigationController?.pushViewController(nextViewController, animated:true)
oder
let VC:NextViewController = storyboard?.instantiateViewController(withIdentifier: "NextViewController") as! NextViewController self.navigationController?.pushViewController(VC, animated: true)
quelle
Ich gebe Ihnen meinen Code für einen Übergang. In diesem Beispiel stellt die Aktion eine Verbindung zu einem UIButton her. Vergessen Sie also nicht, es einzustellen. Vergessen Sie nicht, den Namen Ihres ViewControllers in der
transition
Methode festzulegen .Vergessen Sie nicht, auch Ihr Storyboard einzurichten. Sie benötigen eine Ansicht pro viewController. Verbinden Sie jeden ViewController mit jeder Ansicht in storyBoard. Sie können auf dem Screenshot unten sehen
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 }) } }
quelle
Wenn Sie eine Benutzeroberfläche ohne Drag & Drop erstellen (ohne Storyboard zu verwenden) und die Standardseite oder ViewController.swift zu einer anderen Seite navigieren möchten? Befolgen Sie diese Schritte 1) Fügen Sie eine Klasse hinzu (.swift) 2) Importieren Sie UIKit 3) Deklarieren Sie den Klassennamen wie
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) } }
Nach dem Erstellen der zweiten Seite kehren Sie zur ersten Seite zurück (ViewController.swift). Erstellen Sie hier eine Schaltfläche in der viewDidLoad-Methode
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)
Definieren Sie jetzt die buttonAction-Methode außerhalb von viewDidLoad () in derselben Klasse
func buttonAction(sender: UIButton!) { let obj : DemoNavigationClass = DemoNavigationClass(); self.navigationController?.pushViewController(obj, animated: true) }
Behalte eine Sache, die ich vergessen habe, in main.storyboard, es gibt eine Szene mit einem Pfeil, wähle diesen Pfeil aus und drücke die Entf-Taste
Ziehen Sie nun einen Navigationscontroller per Drag & Drop und löschen Sie die mit dem Navigation Controller gelieferte Tabellenansicht. Wählen Sie den Navigationscontroller aus, drücken Sie die Steuerungstaste auf der Tastatur und ziehen Sie ihn in eine andere Szene im Storyboard, ViewController. Dies bedeutet, dass Ihr Viewcontroller zum Root-Viewcontroller wird. Ich hoffe, dies hilft Ihnen. Vielen Dank in main.storyboard, Drag & Drop-Navigationscontroller.
quelle
let signUpVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SignUp") // self.present(signUpVC, animated: false, completion: nil) self.navigationController?.pushViewController(signUpVC, animated: true)
quelle
Zusätzlich zu den oben genannten guten Antworten, um den Navigationsansichts-Controller in Ihrer App oben auf Ihrem Bildschirm festzulegen , können Sie ihn wie folgt zu Ihrer AppDelegate.swift- Datei innerhalb des Blocks hinzufügen
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { window = UIWindow() window?.makeKeyAndVisible() window?.rootViewController = UINavigationController(rootViewController: LoginViewController()) return true }
quelle
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) }
Ändern Sie unseren Controllernamen RegisterNewUserViewController
quelle
storyboard
Ich denke, Sie suchen so etwas:
let signUpViewController = SignUpViewController() present(signUpViewController, animated: true, completion: nil)
Wenn Sie die neue Seite im Vollbildmodus anzeigen möchten:
present(signUpViewController, animated: true, completion: nil)
Hoffe das hilft :)
quelle
Ich bin nicht sicher, ob ich die folgenden Schritte versuchen soll. Ich denke, dass unter den Gründen ein Fehler auftritt.
quelle
let vc = DetailUserViewController() vc.userdetails = userViewModels[indexPath.row] self.navigationController?.pushViewController(vc, animated: true)
quelle