2016-08-06 2 views
0

Мое приложение имеет следующий поток, если пользователь вошел в системуDismissViewController Swift

Loading Screen -----> Main Screen -----> Rest of App

и следующий поток, если он не является:

Loading Screen -----> Login Screen -----> Main Screen -----> Rest of App

Теперь я реализую функцию Выход , Я добавил следующий код в main Screen:

func handleLogout() { 
     if self.presentingViewController != nil { 
      var vc = self.presentingViewController 
      while ((vc!.presentingViewController) != nil) { 
       vc = vc!.presentingViewController 
      } 
      vc?.dismissViewControllerAnimated(true, completion: { 
      }) 
     } 
} 

Это прекрасно работает, если 1st путь следует (пользователь вошел в систему, когда была запущена программа) как приложение возвращается к Loading Screen, а затем загружает Login Screen как и ожидалось. Однако, если был проведен путь 2nd(пользователь не был зарегистрирован, когда приложение было запущено, и Login Screen был использован) этот код приводит к открытию Login Screen и сбою всего процесса выхода из системы. Есть ли способ, которым я могу гарантировать, что Loading Screen является тем, который всегда загружается этим кодом независимо от того, какой из двух путей был соблюден.

+1

Вы с помощью раскадровки? Если это так, просто создайте сеанс размотки для загрузки экрана и вызовите это из того места, где вам нужно – Paulw11

ответ

1

Использовать разматывать segues!

Вы в основном добавляете разматывание, соединяющее ваш «главный экран» и «экран входа». Дайте ему идентификатор, и вы можете инициировать segue всякий раз, когда захотите. В handleLogout:

func handleLogout() { 
    self.performSegueWithIdentifier("your identifier", sender: self) 
} 

Для получения дополнительной информации о том, как создать разматывания SEGUE: https://www.andrewcbancroft.com/2015/12/18/working-with-unwind-segues-programmatically-in-swift/

0

Это просто предложение здесь идет:

В AppDelegate файл, который вы можете сделать что-то похожее на это:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     //Implement this method 
     let userLoggedIn = isUserLoggedIn(); 
     if !userLoggedIn { 
      let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) 
      //Instantiate the login view controller 
      window?.rootViewController = storyboard.instantiateViewControllerWithIdentifier("login") 
      window?.makeKeyAndVisible() 
     } 

     return true 
    } 

Теперь, когда приложение запускается он будет первым проверить пользователь состояние входа и дисплей соответствующий вид.

Примечание: это если вы используете раскадровки и контроллер представления корня устанавливается в Main Screen

0

Если вы используете раскадровки, я бы предложил создать раскадровку, которая используется исключительно для просмотра Логин/с. Затем в методе AppDelegate DidFinishLoading вы можете показать раскладку входа в систему, если им нужно войти в систему или показать основную раскадровку, если они уже вошли в систему. Вы можете менять раскадровку в любое время и легко ее выполнять. Это поможет немного упростить поток. Это то, что я обычно делаю в своих приложениях. Если вам нужен образец кода, просто дайте мне знать.

Смежные вопросы