우선, 최상위 뷰를 구하기 전에 필요한 코드가 있다.
UIApplication.shared.keyWindow? ~~
하지만 위의 코드를 사용해도 빌드에는 문제가 없지만, iOS 13부터는 deprecated 되었다고 경고문이 뜬다.
그래서 대체할 코드를 전역 변수로 선언해 놓자!
let keyWindow = UIApplication.shared.connectedScenes
.filter({$0.activationState == .foregroundActive})
.map({$0 as? UIWindowScene})
.compactMap({$0})
.first?.windows
.filter({$0.isKeyWindow}).first
최상위 뷰 구하기
extension UIWindow {
public var visibleViewController: UIViewController? {
return self.visibleViewControllerFrom(vc: self.rootViewController)
}
public func visibleViewControllerFrom(vc: UIViewController? = UIApplication.shared.windows.first?.rootViewController) -> UIViewController? {
if let nc = vc as? UINavigationController {
return self.visibleViewControllerFrom(vc: nc.visibleViewController)
} else if let tc = vc as? UITabBarController {
return self.visibleViewControllerFrom(vc: tc.selectedViewController)
} else {
if let pvc = vc?.presentedViewController {
return self.visibleViewControllerFrom(vc: pvc)
} else {
return vc
}
}
}
}
사용법
if let topVC = keyWindow?.visibleViewController {
//code
}
- 여기서 keyWindow는 위에서 말했듯이 전역 변수로 선언해 놓은 변수다.
320x100
'프로그래밍 > iOS-Swift' 카테고리의 다른 글
[SWIFT] iphone 슬립 모드(화면 자동 잠금) 방지 (0) | 2021.07.07 |
---|---|
[SWIFT] Root View 변경하기 (0) | 2021.07.06 |
[SWIFT] URL to UIImage (0) | 2021.07.06 |
[SWIFT] IBDesignable 에러 대응 방법 (0) | 2021.04.09 |
[SWIFT] error: projectName/Pods/Pods...ProjectName.debug.xcconfig unable to open file (0) | 2021.04.09 |
댓글