Jiwift

[iOS/Swift] Root ViewController 변경하기, Root 화면 바꾸기, 'windows' was deprecated in iOS 15.0 본문

iOS Dev/Swift

[iOS/Swift] Root ViewController 변경하기, Root 화면 바꾸기, 'windows' was deprecated in iOS 15.0

지위프트 2023. 10. 16. 22:15
반응형

 Root View를 변경하기 위해서 사용했던 코드 두가지 방법을 공유합니다. 설명은 따로하지 않고, 제가 기록용으로 남기기 위해서 작성해둡니다. 응용을 통해서 원하는 방식으로 구현하세요...!

import UIKit

// MARK: - UIWindow의 rootViewController를 변경하여 화면전환
internal func changeRootViewController(newStoryboard: String, nextViewController: String) {
    DispatchQueue.main.async {
        let newStoryboard = UIStoryboard(name: newStoryboard, bundle: nil)
        let newViewController = newStoryboard.instantiateViewController(identifier: nextViewController)

        if let window = UIApplication.shared.windows.first {
            window.rootViewController = newViewController
            UIView.transition(with: window, duration: 0.5, options: .transitionCrossDissolve, animations: nil)
        }
        return
    }
}

 기존에 사용하던 코드입니다. 다양한 방법이 있지만 제가 사용하던 방법 그대로 공유드립니다. 원하는 방식으로 조합해서 사용하시면됩니다.  

 

newStoryboard = 스토리보드가 여러개인 상황에 필요한 변수 해당 ViewController가 있는 Storyboard를 알려주세요.

nextViewController = 원하는 ViewController 클래스 이름을 알려주세요.

 


 

아래는 Storyboard 없이 작업하면서 

"'windows' was deprecated in iOS 15.0: Use UIWindowScene.windows on a relevant window scene instead"

에러를 대신하기 위해 작성한 코드입니다.

 

코드

import UIKit

// MARK: - 현재 RootViewController를 새로운 화면으로 변경
static internal func changeRootViewController(currentView: UIView, controller: UIViewController) {
    DispatchQueue.main.async {
        currentView.window?.rootViewController = controller
        return
    }
}

 현재 View의 상위 ViewController를 새로운 ViewController로 변환하는 코드입니다. 함수를 만들 때 UIViewController 자리에 UINavigationController를 넣어서 응용할 수 있습니다. import UIKit을 해줍니다. 

 

 

 

반응형