2016-11-28 4 views
0

사용자의 facebookUID이 이미 저장되어있는 경우 MainViewController으로 표시하고 rootViewController으로 설정하고 그렇지 않은 경우 LoginViewController으로 표시하는 응용 프로그램이 있습니다. 내 AppDelegate.swift 파일에 rootViewController으로루트보기 컨트롤러 변경 및 모든보기 컨트롤러 해제

MainViewController 내부에는 모달로 표시되는 SettingsViewController 화면이 있습니다. 그 설정 화면에는 로그 아웃 버튼이 있습니다.

내 질문은 rootViewControllerLoginViewController으로 설정하는 방법과 로그 아웃 버튼을 클릭 할 때 스택의 다른 모든 컨트롤러를 닫을 수 있습니까?

답변

2

본질적으로 앱 위임자와 동일한 방식으로 사용합니다. 하지만 당신은 애플 대리자에서 하지이다, 그래서 당신은 단계가 얻을 수 있습니다 UiApplication 클래스에서

  1. 당신이 shared 응용 프로그램 개체에 대한 참조를 얻을 수 있습니다.

  2. 거기에서 앱의 delegate을 얻을 수 있습니다.

  3. 여기에서 앱 대표단 window을 얻을 수 있습니다.

  4. 이제 창 rootViewController을 설정할 수 있습니다.

루트 뷰 컨트롤러는 모든 종속 뷰 컨트롤러와 함께 연기 퍼프에 사라질이었다 뷰 컨트롤러.

(이것은, 그러나 내가 어떻게 그것을 할 것입니다.) 누구의 유일한 직업 LoginViewController 또는 MainViewController 사용자 지정 부모보기 컨트롤러 수있는 안정적인 루트보기 컨트롤러가 것입니다. 앱의 중간에서 루트보기 컨트롤러를 변경하려는 생각이 들지만 여전히 불법은 아닙니다.)

+0

안정적인보기 컨트롤러에 대한 생각이 마음에 들었습니다. 그냥 설정하고 작동 시키십시오. 그것은 훨씬 깨끗한 솔루션의 IMO입니다. 감사! – Thomas

+1

감사합니다. 다행이었습니다. 맞춤형 상위 뷰 컨트롤러로 하위 뷰 컨트롤러를 전환 할 때 전환 애니메이션을 담당하기 때문에 유연한 솔루션입니다. – matt

0

이 코드를 사용해보십시오. 애니메이션으로 로그인 화면으로 전환 할 수 있습니다. 또한 이전 viewcontroller 계층을 유지할 위험이 없음

if let appWindow = UIApplication.shared.delegate?.window { 

     UIView.transition(with: appWindow!, 
          duration: 0.6, 
          options: UIViewAnimationOptions.transitionFlipFromRight, 
          animations: { 
          let loginVC = LoginVC.init(nibName: "LoginVC", bundle: nil) 
          appWindow?.rootViewController = loginVC 
     }, 
          completion: nil) 
    }