최상단 뷰컨트롤러 가져오기


설명

뷰가 많이 중첩 되다보면 잘못된 구조로 인해 뷰 전환등을 사용을 못하게 되는 경우가 있습니다. 그렇게 안 만드는 것이 제일 중요하지만 디자인등 여러가지를 고려하다보면 피치 못하게 만들어지는 경우가 많습니다. 그럴때 사용 하면 유용한 extension 입니다.


사용환경

* Swift 4.2
* XCode 10.0

코드

extension UIApplication {
    class func topViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let nav = base as? UINavigationController {
            return topViewController(base: nav.visibleViewController)
        }
        if let tab = base as? UITabBarController {
            if let selected = tab.selectedViewController {
                return topViewController(base: selected)
            }
        }
        if let presented = base?.presentedViewController {
            return topViewController(base: presented)
        }
        return base
}

//사용 방법
if let topVC = UIApplication.topViewController() {
     topVC.present(UIViewController(), animated: true, completion: nil)
}

맞치며

정말 뷰 계층에 공부가 필요한 이유중 하나입니다. 뷰계층 구조를 무시하고 만들다보면 진짜 어마어마한 결과물이 나옵니다,, 물론 개발자가 잘못 만드는 경우도 있지만 디자인 때문에 어쩔 수 없게 나오는 경우도 많습니다. 디자이너, 기획자와 잘 얘기(?)를 해서 원만하게 해결하는 것도 좋은 방법중 하나입니다. 틀린점이나 궁금한점은 댓글 남겨 주시면 답변 해드리겠습니다. 감사합니다 :)



+ Recent posts