[IOS] UINavigationBarDelegate 를 사용하여 뒤로가기 동작 막는 방법

UINavigationBarDelegate 를 사용하기 위해서는 해당 UINavigationBar의 delegate를 설정해야 합니다. UINavigationBar는 기본적으로 UINavigationController에서 관리되는데, 따라서 UINavigationControllerDelegate를 사용하여 UINavigationController의 delegate를 설정해야 합니다.

다음은 UINavigationControllerDelegate를 사용하여 UINavigationBarDelegate에 delegate를 설정하는 방법입니다:

  1. UINavigationControllerDelegate 프로토콜을 채택한 뒤, 해당 ViewController에 delegate를 설정합니다. ViewController 클래스 선언 부분에 UINavigationControllerDelegate를 추가합니다.
class YourViewController: UIViewController, UINavigationControllerDelegate {
    // ...
}
  1. viewDidLoad()에서 UINavigationController의 delegate를 현재 ViewController로 설정합니다.
override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.delegate = self
}
  1. UINavigationBarDelegate 메서드를 구현하여 원하는 동작을 수행합니다.
func navigationBar(_ navigationBar: UINavigationBar, shouldPop item: UINavigationItem) -> Bool {
    // 뒤로가기 동작을 막고자 할 때 필요한 로직을 구현합니다.
    return false
}

위의 예시에서는 UINavigationControllerDelegate 프로토콜을 채택하고, viewDidLoad()에서 navigationController?.delegate를 현재 ViewController로 설정합니다. 그리고 navigationBar(_:shouldPop:) 메서드를 구현하여 뒤로가기 동작을 막고자 할 때 필요한 로직을 작성합니다.

이제 ViewController의 UINavigationBarDelegate 메서드를 사용하여 UINavigationBar의 동작을 커스터마이즈할 수 있게 되었습니다.