IOS) 코드로 모달 전환하기 + 모달에 네비게이션 띄우기

슆공부·2022년 7월 30일
0

현재 진행중인 프로젝트에서 작성 화면을 모달로 띄워서 title을 변경하려하는데 잘 되지 않아서 작성하는 글이다.
모달 개념이 부족한듯.. 아직도..

작성 화면 전 화면, 그니까 내 프로젝트 화면은 네비게이션 컨트롤러가 뷰컨들과 연결되어있는데 작성 화면 전 화면은 메인 화면이다.
그 메인 화면의 네비바에 rightbutton을 추가해주었다.

class MainViewController: UIViewController {
  
  override func viewDidLoad() {
    super.viewDidLoad()
    configureNavigation()
  }
  
  private func configureNavigation() {
    self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(presentDetail))
  }
  
  @objc private func presentDetail() {
    guard let vc = self.storyboard?.instantiateViewController(withIdentifier: "WritePlaceViewController") as? WritePlaceViewController else { return }
//    vc.modalTransitionStyle = .coverVertical
//    vc.modalPresentationStyle = .fullScreen
    self.present(vc, animated: true)
  }
}

그런데 title 등 내가 원하는 네비게이션 바를 모달에도 적용시켜주고 싶어서 모달로 띄우고 싶은 뷰컨에 또 하나의 네비게이션 컨트롤러를 embed 해주었다.

하지만,, 이 네비게이션 컨트롤러를 어디다가 어떻게 연결해야하는지 헷갈렸다 ㅠㅠ
일단 버튼을 누르면 두번째 뷰컨이 아니라 네비게이션 컨트롤러를 띄워야하는지는 알겠는데 이 네비게이션 컨트롤러를 스토리보드말고 코드에서 어떻게 연결해주어야할지 ??? 잘 모르겠었다.

검색해본 결과 내가 띄워주고 싶은 네비게이션 컨트롤러에도 identifier를 정해주면 됐었다.
다른 뷰컨은 식별자를 정해주는데 왜 네비게이션 컨트롤러에는 안된다고 생각했을까..ㅎ
암튼 아래와 같이 작성하면 네비바를 갖춘 모달이 띄워지게 된다!

  @objc private func presentNavigation() {
    guard let navigation = self.storyboard?.instantiateViewController(withIdentifier: "NavigationController") as? UINavigationController else { return }
    self.present(navigation, animated: true)
  }

0개의 댓글