Storyboard를 사용해 Segue로 연결하는 방식으로 프로젝트를 진행할 경우 기본적으로 Swipe-back 기능이 구현되어 있지만 Code base로 Layout을 짜거나 Storyboard를 분리하여 segue 연결을 따로 하기 resouce가 많이 드는 경우에는 따로 구현해주어야한다
extension UINavigationController: ObservableObject, UIGestureRecognizerDelegate {
override open func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = self
}
public func gestureRecognizerShouldBegin(_: UIGestureRecognizer) -> Bool {
return viewControllers.count > 1
}
}
Swipe-back 구현 코드는 매우 간단하다.
UINavigationController Extension에 interactivePopGestureRecognizer delegate를 설정해주고 gestureRecognizerShouldBegin 함수 내에서 화면 hierachy에 맞는 조건을 설정해주면 된다
만약 navigationBar.isHidden같은 코드가 중복적으로 사용되고 있다면 아래처럼 extension에 한 줄만 추가해주면 많은 중복 코드를 줄일 수 있다
extension UINavigationController: ObservableObject, UIGestureRecognizerDelegate {
override open func viewDidLoad() {
super.viewDidLoad()
navigationBar.isHidden = true
interactivePopGestureRecognizer?.delegate = self
}
public func gestureRecognizerShouldBegin(_: UIGestureRecognizer) -> Bool {
return viewControllers.count > 1
}
}