[iOS] window 속성에 접근하기, RootViewController 변경하기

신용철·2020년 9월 22일
2

iOS_View

목록 보기
2/11

가끔 특정 case에 따라 rootView를 변경해주어야 할 경우가 있습니다. 이번 포스트에서는 rootView에 접근하는 방법에 대해서 알아보겠습니다.

1. view에서 rootViewController에 접근하는 방법

  • rootView에 접근을 시도하는 곳이 UIView를 상속한 class 라면 해당 view의 window 속성을 통해 rootView에 접근할 수 있습니다. 왜냐하면 모든 view는 자신을 포함하고 있는 window속성을 가지고 있기 때문입니다. 가장 흔한 방법이 self.view.window.rootViewController 입니다.

  • UIView의 window 속성을 통해 해당 UIView가 window에 속해있는지 여부도 확인할 수 있습니다. 만약 window속성 값이 nil을 반환하면 해당 UIView는 window에 속해있지 않고 따라서 볼 수 없는 상태임을 의미합니다.

2. SceneDelegate 또는 AppDelegate에서 접근하는 방법

  • sceneDelegate, AppDelegate에는 var window프로퍼티가 선언되어 있습니다. 이를 통해 rootViewController에 접근할 수 있습니다.

3. 그 외의 곳에서 접근하는 방법

  • main함수에 의해 app launch시 싱글턴으로 인스턴스화 된UIApplciation.shared를 통해 window속성을 통해 rootViewController에 접근할 수도 있습니다.
   let rootVC = UIApplication.shared.windows.first!.rootViewController

4. window에 접근 시 주의할 점

  • App이 처음 실행 될 때 생성되는 window가 유일한 것은 아닙니다. app 실행중에 다른 종류의 window들이 생성되기도 합니다. 예를 들면 UITextEffectsWindow와 UIRemoteKeyboardWindow 등이 이에 해당됩니다.
  • 따라서 UIApplication.shared를 사용할 때 다른 window에 접근하지 않도록 유의해야 합니다.
profile
iOS developer

0개의 댓글