Abrir la primera vista según la condición

Aug 15 2020

Quiero que mi aplicación verifique al inicio condicionalmente si una variable es correcta o no. En base a eso, debería ir a una pantalla de introducción (donde puede seleccionar una variable en mi caso, seleccionar un equipo) o debería iniciar la vista principal. Después de buscar, encontré este código y lo edité.

Pero todavía parece haber problemas. En primer lugar, no tengo dos identificadores. La introducción tiene una, pero no la vista principal. Mi vista principal se llama WeatherViewController y la pantalla de introducción se llama FirstScreenViewController.

También agregué una imagen de mi Main.storyboard. También busqué en Google mucho sobre UINavigationController condicional, pero solo puedo entenderlo con un video y no encontré un video al respecto.

Intenté usar el código de aquí .

 var id = hello ? "goToIntro" : "???"
      self.window = UIWindow(frame: UIScreen.main.bounds)
      let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
      let WeatherViewController: UIViewController = mainStoryboard.FirstScreenViewController(withIdentifier: WVC has no identifier??) as UIViewController
      self.window?.rootViewController = WeatherViewController
      self.window?.makeKeyAndVisible()
       if hello {
          self.performSegue(withIdentifier: "goToIntro", sender: self)
        } else {
    /here nothing should happen. It should open the Main View
          self.performSegue(withIdentifier: "???", sender: self)
        }

Respuestas

Frankenstein Aug 15 2020 at 15:59

Simplemente repita los pasos que hizo para crear la secuencia goToIntro.

  1. Agregue un nuevo UIViewController( MainViewController) en su guión gráfico.
  2. Agregue un segue y asígnele un identificador.
  3. Proporcione el valor del identificador en la condición else del código que ha mostrado en su publicación para realizar la transición al UIViewControllerque acaba de crear.

El código final debería verse así:

var id = hello ? "goToIntro" : "goToMain"
guard let windowScene = scene as? UIWindowScene else { return }
window = UIWindow(windowScene: windowScene)
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let weatherViewController = mainStoryboard.instantiateInitialViewController()
window?.rootViewController = weatherViewController
window?.makeKeyAndVisible()
weatherViewController.performSegue(withIdentifier: id, sender: self)

No necesita el if elsebloque ya idque ya se determina mediante el ?operador ternario.