반응형
딥링크를 사용하여 동작을 할 경우 AppDelegate나 ScrenDelegate에서 ViewController를 호출해야 할 경우가 있습니다.
이때 NavigationController를 호출하는 방법을 알아 보겠습니다.
1. UIWindow의 rootViewController가 UINavigationController인 경우
앱의 rootViewController가 UINavigationController인 경우, 직접 접근할 수 있습니다.
if let navigationController = self.window?.rootViewController as? UINavigationController {
// navigationController 사용
}
2. UITabBarController를 사용하는 경우
rootViewController가 UITabBarController인 경우, 선택된 탭 또는 특정 탭의 UINavigationController에 접근해야 할 수 있습니다.
if let tabBarController = self.window?.rootViewController as? UITabBarController,
let navigationController = tabBarController.selectedViewController as? UINavigationController {
// navigationController 사용
}
if let tabBarController = self.window?.rootViewController as? UITabBarController,
let navigationController = tabBarController.viewControllers?[desiredIndex] as? UINavigationController {
// navigationController 사용
}
3. UISplitViewController 또는 기타 커스텀 컨테이너 뷰 컨트롤러 사용하는 경우
rootViewController가 UISplitViewController이거나 사용자 정의 컨테이너 뷰 컨트롤러인 경우, 해당 뷰 컨트롤러의 구조에 따라 UINavigationController에 접근해야 합니다. 예를 들어 UISplitViewController에서:
if let splitViewController = self.window?.rootViewController as? UISplitViewController,
let navigationController = splitViewController.viewControllers.last as? UINavigationController {
// navigationController 사용
}
4. SceneDelegate를 사용하는 경우(iOS 13 이상)
iOS 13 이상에서는 SceneDelegate에서 UI 관련 작업을 관리합니다. 이 경우 AppDelegate 대신 SceneDelegate에서 UINavigationController에 접근해야 합니다.
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let navigationController = windowScene.windows.first?.rootViewController as? UINavigationController {
// navigationController 사용
}
결론
사실 1번, 2번, 3번 방법보다 4번 방법만으로도 충분히 활용가능합니다.
반응형
'2023년 부터 > iOS&Swift' 카테고리의 다른 글
[iOS&Swift] 버그&이슈 (Asset validation failed Invalid bundle) (0) | 2024.03.26 |
---|---|
[iOS&Swift]Firebase에서 FCM 토픽 메시징으로 사용자 관심사별 알림 전송하기 (0) | 2024.03.26 |
[iOS/Swift]OneLink 적용 및 테스트 방법 (0) | 2024.02.08 |
[iOS/Swift]Decoding Error(The data couldn’t be read because it is missing) (0) | 2024.01.15 |
[iOS] 공백만 입력되었는지 체크하는 로직 (0) | 2024.01.12 |