[IOS] Back 버튼으로 이전 화면으로 가지 않도록 하려면 UINavigationControllerDelegate

iOS에서 “Back” 버튼으로 이전 화면으로 가지 않도록 하려면 UINavigationControllerDelegate 프로토콜의 navigationController(_:willShow:animated:) 메서드를 사용하여 이전 화면으로의 전환을 막을 수 있습니다. 다음은 해당 방법을 설명하는 예시 코드입니다:

  1. ViewController에 UINavigationControllerDelegate 프로토콜을 채택합니다. 클래스 선언 부분에 UINavigationControllerDelegate를 추가합니다.
class YourViewController: UIViewController, UINavigationControllerDelegate {
    // ...
}
  1. ViewController의 viewDidLoad() 메서드에서 Navigation Controller의 delegate를 설정합니다.
override func viewDidLoad() {
    super.viewDidLoad()
    
    // ...
    
    navigationController?.delegate = self
}
  1. ViewController에 다음의 navigationController(_:willShow:animated:) 메서드를 구현합니다. 이 메서드는 Navigation Controller에서 다른 ViewController로 전환되기 직전에 호출됩니다.
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    if viewController == self {
        // 이전 화면으로의 전환을 막기 위해 루트 뷰 컨트롤러인 경우에만 동작하도록 합니다.
        // 여기에서 원하는 동작을 수행하세요.
        navigationController.interactivePopGestureRecognizer?.isEnabled = false
    } else {
        // 이전 화면으로의 전환을 허용합니다.
        navigationController.interactivePopGestureRecognizer?.isEnabled = true
    }
}

위 코드에서는 현재 ViewController가 루트 뷰 컨트롤러인 경우에만 “Back” 버튼을 비활성화하도록 설정했습니다. navigationController.interactivePopGestureRecognizer?.isEnabledfalse로 설정하여 사용자가 “Back” 버튼을 눌러도 이전 화면으로 전환되지 않도록 막을 수 있습니다.

위 코드를 사용하면 “Back” 버튼으로 인한 이전 화면 전환을 제어할 수 있습니다.