개발하기좋은날

ViewController 제거, rootView 지정 하는법 본문

iOS/Development

ViewController 제거, rootView 지정 하는법

devbi 2021. 1. 28. 12:00
반응형

ViewConroller 를 제거하는건 쉽다 

 

self.dismiss(animated: false, completion: nil)

 

ViewController에서는 view는 스택으로 쌓이게된다 그리고 여러 view 중 rootView 가 존재한다 

 

rootView는 제거가 되지않는 뷰로 이걸 이용해서 몇가지 응용이 가능하다 

 

일단 처음 어플리케이션을 시작을 하게되면 시작되는 ViewController 가 rootViewController 된다 

(예를들어 스토리 보드에서 "->" 표시를 가지고있으면 rootView가 될수있다)

 

 

1. rootView 를 다른 ViewController로 지정하기

2. rootView를 뺴고 다른 ViewController 제거하기 

 

  • rootView를 지정하는법은 두가지가 있다 
// 첫번째는 sceneDelegate, Appdelegate에서 접근 하는 방법 
UIApplication.shared.windows.first?.rootViewController = self

// 두번쨰는 view에서 접근 하는 방법 
self.view.window?.rootViewController = self 

 

- 첫번쨰

싱글턴으로 인스턴스화된 UIApplication 으로 접근하는 방법인데 주의할게 있다 

  • 앱 최초 실행시 생성되는 window가 유일한 것은 아니라서 앱 실행중에 다른 종류의 window들이 생성될수도있음 예를 들면 UITextEffectsWindow와 UIRemoteKeyboardWindow 등이 있음 
  • UIApplication.shared를 사용하여 접근한다면 다른 window에 접근하지 않도록 조심 해야한다

- 두번째 

view에서 접근하는 방법인데 이게 nil 일수도있으니 확인하고 사용 하자 

viewdidAppear 이후 객체를 얻어올수있으니 참고하자 

 

 

  • rootView를 뺴고 모든 뷰를 제거해보자 (rootViewController기준 rootView를 제외한 모든 뷰들이 사라진다)
self.view.window?.rootViewController?.dismiss(animated: false, completion: nil) // 루트뷰를 제외한 모든뷰 제거

 

 

 

** 추가로 이전 뷰를 가지고 오는 방법은 다음과 같다 as 이후는 타입캐스팅이니 본인의 viewcontroller에 맞게끔 수정 하면 된다

** 이전 view를 가지고오면 간단하게 데이터 전송이라던가 핸들링을 할수있으니 알아두면 쓸모가있다 

 guard let pvc = self.presentingViewController as? CustomTabarController else {
 	return
 }

 

반응형
Comments