본문 바로가기
프로그래밍/iOS-Swift

[SWIFT] 최상위 뷰 구하기

by 채연2 2021. 7. 6.

 

 

 

 

 

우선, 최상위 뷰를 구하기 전에 필요한 코드가 있다.

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

댓글