Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.1k views
in Technique[技术] by (71.8m points)

ios - Display a particular viewcontroller in Xcode/swift using if else conditional statements

I want a to have a conditional if statement to be run immediately when the app is open. Basically, it will be

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

This will be in Xcode and coded in swift (obviously the syntax is wrong)... what is the appropriate way to write the syntax to segue to a particular view controller if the condition is true and stay on the one that normally is opened up to upon opening the app? Also, where do I put this? I considered the viewdidload method in the, normally, first displayed viewcontroller, but the variable needs to be checked before the view loads, such that the view changes to a different one if the condition is true and that one opens first instead?

Edit: I tried to set the code in the AppDelegate.swift as follows:

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
    }

But when I run this I get an error in the appDelegate saying that "libc++abi.dylib: terminating with uncaught exception of type NSException". What is the right way to modify this code?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
  1. If you want to select the scene before presenting. You can add the following in appDelegate.swift, in application(application: UIApplication, didFinishLaunchingWithOptions):

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

    Make sure you name the scenes in storyboard

  2. If you OK with the first scene showing and then choosing to segue:

    if x {
      self.performSegue(withIdentifier: "id1", sender: self)       
    } else {
      self.performSegue(withIdentifier: "id2", sender: self)
    }
    

    Again, make sure to name the segues in storyboard

  3. Another option, use UINavigationController. Set a Navigation Controller as your root 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()
    

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...