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

swift NavigationController back 제스처 제어하는 코드(UIGestureRecognizerDelegate)

by Mr-후 2022. 5. 10.
반응형

오늘 일하던 중, 뷰컨트롤러의 계층 구조에 대한 오류(whose view is not in the window hierarchy.)가 발생하는 바람에 이전 프로젝트에서 했던 방식과 동일하게 네비게이션컨트로럴를 사용하도록 변경을 하고 특정 페이지에서는 좌에서 우로 제스처 동작이 먹히지 않도록 처리를 했다. 이런건 기록 해놔야 한다. 

전체적인 뷰컨트롤러의 관리는 UIManager가 하고 있으므로 UIManager에 다음과 같은 메서드가 있다. 

 

다음 프로토콜을 따른다고 명시해야한다. 

@protocol UIGestureRecognizerDelegate <NSObject>

 

소스코드는 다음과 같다. 

    /**
     * NavigationBar Back
     */
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        if UIManager.shared.mainNavigationController?.viewControllers.count ?? 0 == 1 {
            return false
        }
        
        if UIManager.shared.mainNavigationController?.viewControllers.count ?? 0 > 1 {
            if let _ = UIManager.shared.topViewController() as? ProfileViewController {
                return false
            }
        }
        return true
    }

 

제스처를 강제해야하는 컨트롤러가 많아지면? 

뭔가 좀 더 생각한 뒤의 코드가 필요하겠다. 고민해바야겠다는 ^^ 

 

반응형