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
}
반응형