2016-07-29 6 views
1

Ich möchte, dass eine bedingte if-Anweisung sofort ausgeführt wird, wenn die App geöffnet ist. Grundsätzlich wird esAnzeige eines bestimmten Viewcontrollers in Xcode/swift unter Verwendung von if else bedingten Anweisungen

if x = true { 
    //segue to viewcontroller1 
} else { 
    //stay on this page 
} 

Die in Xcode wird und codiert in schnellen (offensichtlich die Syntax ist falsch) ... Was ist der richtige Weg um die Syntax segue zu einem bestimmten View-Controller, wenn die Bedingung zu schreiben ist wahr und bleibe auf demjenigen, der normalerweise beim Öffnen der App geöffnet wird? Wo soll ich das auch hinstellen? Ich habe die viewdidload-Methode im normalerweise zuerst angezeigten Viewcontroller betrachtet, aber die Variable muss überprüft werden, bevor die Ansicht geladen wird, so dass die Ansicht zu einer anderen Ansicht wechselt, wenn die Bedingung wahr ist und stattdessen die erste öffnet?

Edit: Ich habe versucht, den Code in den AppDelegate.swift wie folgt festzulegen:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     if x{ 
      let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil) 
      let ViewController = mainStoryBoard.instantiateViewController(withIdentifier: "ViewController") as! ViewController 
      let appDelegate = UIApplication.shared.delegate as! AppDelegate 
      appDelegate.window?.rootViewController = ViewController 
     } else{ 
      //same code as above but to different VC 
     } 
     return true 
    } 

Aber wenn ich diese laufen bekomme ich einen Fehler in der AppDelegate sagen, dass „libC++ abi.dylib: mit abgefangene Abschluss Ausnahme vom Typ NSException ". Was ist der richtige Weg, um diesen Code zu ändern?

Antwort

2
  1. Wenn Sie die Szene vor der Präsentation auswählen möchten.

    var id = x ? "id1" : "id2" 
    
    self.window = UIWindow(frame: UIScreen.main.bounds) 
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    let exampleVC: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: id) as UIViewController 
    self.window?.rootViewController = exampleVC 
    self.window?.makeKeyAndVisible() 
    

    Stellen Sie sicher, dass die Szenen in Storyboard

  2. Wenn Sie mit der ersten Szene zeigt und dann segue Auswahl OK: Name:

    Sie können die folgenden in appDelegate.swift, in application(application: UIApplication, didFinishLaunchingWithOptions) hinzufügen
    if x { 
        self.performSegue(withIdentifier: "id1", sender: self)  
    } else { 
        self.performSegue(withIdentifier: "id2", sender: self) 
    } 
    

    Wieder stellen Sie sicher, dass die segues in Storyboard

  3. 0 zu nennen
  4. Eine weitere Option, verwenden Sie UINavigationController. Stellen Sie eine Navigation Controller als Stamm View-Controller

    let id = x ? "id1" : "id2" 
    
    let mainStoryboard = UIStoryboard(name: "MainStoryboard", bundle: nil) 
    let exampleVC = mainStoryboard.instantiateViewController(withIdentifier: id) as UIViewController 
    let navigationController = UINavigationController(rootViewController: exampleVC) 
    self.window = UIWindow(frame: UIScreen.main.bounds) 
    self.window!.rootViewController = navigationController 
    self.window!.makeKeyAndVisible() 
    
+0

Ich habe bearbeitet auf diese Frage (obwohl ich es schon vor langer Zeit gefragt). Ich würde gerne Ihren ersten Ansatz verwenden, aber ich habe versucht und habe den Fehler, den ich oben veröffentlicht habe. Kannst du bitte einen Blick darauf werfen, wie ich den Code ändern soll? –

+0

Einige Änderungen vorgenommen, hoffe es hilft – Idan

Verwandte Themen