일단 네비게이션 컨트롤러를 스토리보드에 추가해준다.
storyboard entry point를 네비게이션 컨트롤러로 지정해준 후 네비게이션 컨트롤러를 메인뷰와 이어준 뒤 root view controller로 지정해주면 메인 view가 rootview가 된다.
뷰는 스택 자료구조처럼 움직이게된다.
First in Lsat out으로 먼저 들어간 계층이 마지막에 나오게 된다
이를 스택 자료구조에선 스택에 넣는다 -> Push, 나오게된다 -> POP
Sugue방식 -> 스토리보드에서 버튼을 우클릭 드래그앤 드롭을 view로 하여 쉽게 구현 가능하며, 이동된 뷰는 스택에 PUSH된다.
code방식
공통: @IBAction을 만들어 컴포넌트가 작동됐을 경우의 Action함수를 만들어 주어한다.
Push(root -> 다른뷰) -> Action함수 내부에서 작성
1. guard let 문으로 옵셔널 바인딩을 해준다.
guard let 상수명 = self.storyboard?.instantiateViewController(withIdentifier: "Storyboard ID") as CodePushViewControllerelse { return }
옵셔널 바인딩을 해주는 이유는 뷰가 있을지 없을지 모르는 옵셔널값이기 때문에 옵셔널 바인딩을 해준 후 사용.
상수명은 옵셔널 바인딩을 받을 상수의 이름.
Storyboardd은 실제뷰에 할당해준 클래스의 Identify의 Storyboard ID를 적는다. 뷰마다 클래스는 하나씩 가지고 있다.
스토리보드에서 클래스명을 지정해줄 수 있다.
Storyboard ID와 클래스 지정법
클래스명에 해당하는 뷰컨트롤러 클릭
1. CustomClass에서 Class를 선택해 준다.
2. Identify를 입력해준다.
2. 바인딩 받은 뷰를 Push 한다.
self.navigationController?.pushViewController(바인딩받은상수, animated: Bool)
실제로 화면 전환이 일어나는 순간은 이때.
POP(Push된 뷰를 제거한다)
self.navigationController?.popViewController(animated: Bool)
pop은 어떠한 뷰를 불러올 필요 없이 제거?하기만 하면 된다. 그러므로 바인딩이 필요하지 않다.
self.navigationController?.popToRootViewController(animated: Bool)
해당 메소드는 바로 Root뷰까지 POP하는 메소드.
해당 UINavigationController는 Present방식은 설명하지 않았습니다.