2016-08-10 7 views
0

Согласно Apple, разделенное представление всегда должно быть контроллером корневого представления на протяжении всего жизненного цикла приложения.Как перезагрузить контроллер корневого представления после выхода из системы?

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

Это просто пример:

// if the user is not logged in 
if FIRAuth.auth()?.currentUser?.uid == nil { 
     window?.rootViewController = UINavigationController(rootViewController: LoginController()) 
    } else { 
     // If the user is logged in, show the main controller 
     window?.rootViewController = UINavigationController(rootViewController: MainController(collectionViewLayout: UICollectionViewFlowLayout())) 
    } 

Без делать то, что я сделал выше: Если бы я выйти из системы, журнал в целях представит себя модально. Если я должен был войти в другую учетную запись и затем отклонить логин-контроллер по-разному, разделение будет по-прежнему выглядеть одинаково из последней учетной записи. Итак, есть ли метод или метод, чтобы я мог представить контроллер журнала с анимацией, которая после повторного входа в систему обновляется с разделенным представлением? Я хочу убедиться, что следую рекомендациям.

(Примечание: корень контроллера представления детали в представлении раздельного является UICollectionViewController я делаю все это программно.).

ответ

0

Я обычно один RootViewController, который остается как корень навсегда. Все, что я хочу, это удерживать и представлять логин и mainController. Таким образом, у вас всегда есть rootViewController, он дает динамическое переключение между представленными контроллерами.

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

Example: 

class rooViewController: UIViewController { 

    func presentedLogin() { 
     self.loginController = LoginController() 
     self.mainController.dismissViewControllerAnimated(true) { 
      self.presentViewController(self.loginController, animated: true, completion: nil) 
     } 
    } 

    func presentMainApplication() { 
     self.mainController = MainController() 
     self.loginController.dismissViewControllerAnimated(true) { 
      self.presentViewController(self.mainController, animated: true, completion: nil) 
     } 
    } 
} 


//App Delegate or any ether place of this application logic: 

    if FIRAuth.auth()?.currentUser?.uid == nil { 
      rootViewController.presentedLogin() 
     } else { 
      // If the user is logged in, show the main controller 
      rootViewController.presentMainApplication() 
     } 
+0

Будет ли 'self.mainController' иметь тип UINavigationController? Как и в, 'var mainController: UINavigationController?' –

+0

Кроме того, не было бы целесообразно иметь экземпляр singleton внутри класса rootViewController? –

+1

Первый вопрос: я предпочитаю UIViewController, я не вижу преимущества UINavigationController для этой цели, поскольку он должен иметь контроллер корневого представления. Но это личное решение, основанное на моих потребностях. Второй вопрос: Корневой контроллер - это единственный экземпляр, но не один тон, если это то, что вы имеете в виду. Это? – MCMatan