Initial View Controller programmatisch schnell einstellen

7

Ich habe lange Objective-C-Antworten hier auf Stack-Overflow gesehen, aber keine schnellen Antworten.

Wie kann ich den initialen View-Controller programmgesteuert in swift von einem View-Controller aus ändern?

Ich würde denken, dass es so etwas gehen würde:

%Vor%

Aber nein, das tut nichts. Die erste Zeile ist gut, aber die Funktionen der zweiten Zeile existieren nicht.

    
owlswipe 19.03.2016, 19:22
quelle

3 Antworten

11

Um dies im View-Controller und nicht im App-Delegate zu tun: Holen Sie einfach den Verweis auf das AppDelegate in Ihrem View-Controller und setzen Sie sein Fensterobjekt mit dem rechten View-Controller als rootviewController.

Schritt 1 : Machen Sie einige NSUserDefaults, die der Benutzer anpassen kann. Ein paar Knöpfe, einige Schalter in einer Tischansicht, etwas. Wenn der Benutzer dann auf die Schaltfläche klickt, ändern wir NSUserDefault.

%Vor%

Haken Sie einige Tasten in einem Einstellungsansicht-Controller bis zu diesen Funktionen, und wir haben begonnen.

Schritt 2 : Richten Sie Storyboard-IDs für alle Storyboards ein, die als Startansicht festgelegt werden sollen. Also für jeden View Controller, der ein initialer View Controller sein könnte:

- Gehe in dein Storyboard.

- Klicken Sie auf den View-Controller.

- Klicken Sie in der rechten Seitenleiste auf das zeitungsähnliche Symbol, in dem Sie die Klasse steuern.

- Aktivieren Sie im Abschnitt "Identität" (dritte Zeile) die Option "Storyboard-ID verwenden" (stellen Sie sicher, dass sie aktiviert ist) und geben Sie dann im Textfeld "Storyboard-ID" etwas wie "VC1" ein. Stellen Sie sicher, dass Sie für jeden Ansichtscontroller eine andere Storyboard-ID auswählen.

-Wiederholen für jeden View-Controller.

Schritt 3 : Richten Sie Ihren anfänglichen Ansichtscontroller in der AppDelegate.swift-Datei ein. Wechseln Sie in den Abschnitt func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool Ihres App-Delegaten.

Fügen Sie Folgendes hinzu, um von dem zuvor erstellten NSUserDefault zu lesen:

%Vor%

Dies sucht nach einer NSUserDefault-Zeichenfolge mit dem Namen "LaunchView" (die Sie in Schritt 1 erstellt haben) und setzt sie auf die neue Variable launchview, wenn sie einen passenden NSUserDefault findet.

Dann wollen wir in den Klammern if let launchview... überprüfen, auf was Sie LaunchView gesetzt haben. Für jedes Objekt, das Sie in Schritt 1 auf LaunchView setzen (im Beispiel habe ich "ViewController2" und "ViewController1" ), müssen Sie hier nachsehen. Innerhalb dieser Klammern fügen wir Folgendes hinzu:

%Vor%

Dann fügen wir innerhalb jeder dieser if-Anweisungen den folgenden Code hinzu:

%Vor%

Dies öffnet das ausgewählte Fenster, wenn Ihre Anwendung geladen wird, nachdem sie eine Weile im Hintergrund war.

Ihr fertiger didFinishLoadingWithOptions -Abschnitt Ihres AppDelegates könnte etwa so aussehen: (nicht nur kopieren und einfügen, lesen Sie die Anweisungen oben)

%Vor%

Ich hoffe, dass dir das hilft, und vielen Dank an Ankit Goel, der mir so sehr geholfen hat. Lesen Sie die Kommentare unten für mehr.

Eine letzte Anmerkung: Wenn Sie Switches in einer Einstellungsansicht verwenden, vergewissern Sie sich, dass Sie in der viewDidLoad des Einstellungsansicht-Controllers den NSUserDefault LaunchView gelesen haben, den der Benutzer zuletzt ausgewählt hat.

    
Ankit Goel 19.03.2016, 19:31
quelle
6

Für Swift 3 aktualisiert

%Vor%     
iajmeri43 13.07.2017 09:39
quelle
2

Zunächst können Sie den initialen View-Controller programmgesteuert für Ihre App in application:didFinishLaunchingWithOptions: unter Verwendung des in der Frage angegebenen Codes setzen:

Sie können alle darin enthaltenen Bedingungen so verwalten, dass sie das eine oder andere UIViewController in der Basis der Bedingungen anzeigen.

Nehmen wir zum Beispiel an, Sie möchten in Ihrer App eine Komplettlösung nur bei der ersten Installation der App anzeigen, danach einen anderen Anmeldebildschirm und dann einen weiteren, aber Sie zeigen nur den ersten Durchlauf und den Login für den Fall nicht vorher und der andere protokolliert werden.

Das kann natürlich auf verschiedene Arten gehandhabt werden, ich versuche nur, Ihnen eine der Möglichkeiten zu erklären, es zu machen.

Hier können Sie zum Beispiel einen Controller namens SplashViewController festlegen, der Ihre anfängliche UIViewController darstellt und darin das Image der App (das große Image-Logo, Launch Screen) und Ihren Prozess zeigt Du gehst an den einen oder anderen Ort. Auf diese Weise säubern Sie den Code in Ihrem AppDelegate und es ist leichter, einen Komponententest dafür durchzuführen.

Wenn Sie jetzt von einem anderen UIViewController zu einem anderen UIViewController wechseln möchten, können Sie den folgenden Code verwenden:

%Vor%

Ich hoffe, das hilft Ihnen.

    
Victor Sigler 19.03.2016 20:28
quelle

Tags und Links