EEYatHo 앱 깎는 이야기

Swift ) 네비게이션 바, 탭바 위에 팝업 띄우기 - EEYatHo iOS 본문

iOS, Swift/Tip, Bug, Swift Error

Swift ) 네비게이션 바, 탭바 위에 팝업 띄우기 - EEYatHo iOS

EEYatHo 2021. 2. 19. 21:13
반응형

[ 요약 ]

 

컨트롤러를 찾아서 그 뷰에 띄우지 말고,

Window 위에 띄워라.


[ 개요 ]

 

Popup 관리 모듈을 만들때의 일. (PopupManager)

 

팝업을 띄워주기위해 현재 화면에 보이는 뷰컨트롤러를 찾아야한다고 생각했다.

 

그래서 구글링해서 찾은 소스.
(visibleViewController, selectedViewController, presentedViewController를 활용해 DFS로 찾아준다.)

class func topViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        // return base
        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
    }

 

여기서 받은 VC에 Popup 이나 Toast를 띄우니까,

당연히, 네비게이션바나 탭바 영역에는 접근할 수 없었다.

 

골똘히 생각하다가,
Window라는 개념이 있었다는게 떠올랐다.

 

UIApplication.shared.keyWindow


당연하게도
여기에 띄워주면 네비게이션 바나 탭바 영역까지 잘 된다.

 

 

역시 아는게 힘..

 

 

Comments