[iOS] Modal →Navigation Controller 구현하기 

Hyowon Jeon·2022년 1월 19일
0

🍎iOS🍎

목록 보기
2/5
post-thumbnail

모달에 네비게이션 띄우기

먼저 스토리보드에서 모달로 띄우고자 하는 ViewController에 Navigation Controller를 embed 해준다.
즉, 모달로 띄울 ViewController를 Navigation Controller의 RootViewController로 만들어준다.


@IBAction func touchUpModalButton(_ sender: UIButton) {
        guard let vc = storyboard?.instantiateViewController(identifier: "ModalViewController") as? ModalViewController else { return }
        vc.modalPresentationStyle = UIModalPresentationStyle.fullScreen

        self.present(vc, animated: true, completion: nil)
    }

이렇게 일반적인 방식으로 모달로 띄우고자 하는 ViewController의 식별자를 가져와 IBAction을 연결해주고

@IBAction func touchUpNavigationButton(_ sender: UIButton) {
        guard let vc = storyboard?.instantiateViewController(identifier: NavigationViewController") as? NavigationViewController else { return }
        
        self.navigationController?.pushViewController(vc, animated: true)
    }

모달로 띄워진 ViewController에서 Navigation을 띄우도록 IBAction을 연결해주었지만
동작하지 않는다.


왜냐면 touchUpModalButton을 클릭했을 때 Navigation Controller 자체에 접근하지 않고 모달로 띄울 ViewController 자체에 접근했기 때문이다.

정상적인 동작을 위해선 ViewController가 아닌 Navigation Controller를 띄워줘야 한다.

@IBAction func touchUpModalButton(_ sender: UIButton) {
        guard let nc = storyboard?.instantiateViewController(identifier: "NavigationController") as? UINavigationController else { return }
        nc.modalPresentationStyle = UIModalPresentationStyle.fullScreen
        
        self.present(nc, animated: true, completion: nil)
    }

이런식으로 Navigation Controller의 식별자를 받아와서 띄워주면 된다.

그럼 저절로 Navigation Conroller의 RootViewController인 ModalViewController가 모달 형식으로 띄워지게 되고 여기서 Navigation stack에 NavigationViewController를 push해주는 touchUpNavigationButton도 동작하게 되는 것이다.

0개의 댓글