[iOS] Navigation Controller
역할
- 화면 위쪽에 네비게이션 바를 추가
- 뷰 컨트롤러를 관리
- 새로운 화면을 표시, 이전 화면으로 돌아가는 것 처리
- 화면을 이동할때마다 네비게이션 바에 있는 버튼과 타이틀도 업데이트
- 컨테이너는 네비게이션 바나 툴바를 뺀다면 그 자체로 뭔가를 출력하지는 않고, 가장 먼저 화면에 표시되는 것은 첫번째로 관리하고 있는 뷰 컨트롤러
Navigation Controller Embed
- 직접 네비게이션 바를 추가하면 스크롤 시 자동전환이나 세이프에리어 색 설정까지 신경쓸 게 많기 때문에 Navigation Controller Embed를 추천한다.
- 실제 뷰 컨트롤러에도 네비게이션 바의 영역이 추가되어있음을 확인 가능하다.
Prefers Large Titles
타이틀 변경
- 네비게이션 바의 속성을 바꾸고자 할 땐 네비게이션 컨트롤러의 인스펙터에서 바꾸면 된다.
- 타이틀을 변경하고 싶다면 본래의 뷰 컨트롤러에서 네비게이션 바를 선택하면 바꿀 수 있다.
Navigation Controller가 화면에 표시되지 않는 이유
- 실행 시 Title이라고 적혀있는 네비게이션 컨트롤러의 화면은 보이지 않는다.
- 이는 VC의 종류가 두 가지이기 때문이다.
Container View Controller
- 뷰를 추가할 수 없다.
- 다른 뷰를 관리하는 컨트롤러
- 왼쪽 뷰컨트롤러에 해당
- 다른 예시로는 탭 바 컨트롤러가 있다.
Content View Controller
- 실제로 UI를 표시하는 뷰 컨트롤러이다.
- 오른쪽 뷰컨트롤러에 해당
Navigation Controller + TableView
배치할 때 화면 전체를 채워야 한다.
혹시라도 중복으로 VC에 Navigation Bar가 있다면 지워주자
- 이렇게 되있으면 스크롤 시 자동적용이 안된다.
Navigation Bar 담당 영역
- present, pop 형식으로 새로운 화면으로 넘어갈 경우 해당 화면까지 이전의 네비게이션 컨트롤러가 관리하지 않는다.
- 따라서 상단 이미지와 같이 다른 네비게이션 컨트롤러를 추가해주어야 한다.
Navigation Controller가 껴있을 때 데이터 전달
- 바로 연결되어 있다면 바로
segue.destination
으로 접근 가능하다.
- 그렇지 않고 Navigation View Controller가 껴있다면
segue.destination.children
속성으로 접근하면 된다. 만약 하나만 있다면 segue.destination.children.first