# 내비게이션 인터페이스(Navigation Interface)란?
iOS에서 내비게이션 인터페이스는 주로 계층적 구조의 화면전환을 위해 사용되는 드릴 다운 인터페이스(drill-down interface)입니다.
드릴 다운 인터페이스란 아래 그림과 같이 각 선택할 수 있는 항목에 대한 세부항목이 존재하는 인터페이스입니다.
# 내비게이션 컨트롤러(Navigation Controller)
내비게이션 컨트롤러는 컨테이너 뷰 컨트롤러(container view controller) 내비게이션 스택(navigation stack)을 사용하여 다른 뷰 컨트롤러를 관리합니다.
여기서 내비게이션 스택에 담겨서 콘텐츠를 보여주게 되는 뷰 컨트롤러들을 컨텐트 뷰 컨트롤러(content view controller)라고 합니다.
내비게이션 컨트롤러는 두 개의 뷰를 화면에 표시합니다. 하나는 내비게이션 스택뷰에 포함된 최상위 컨텐트 뷰 컨트롤러의 콘텐츠를 나타내는 뷰와 내비게이션 컨트롤러가 직접 관리하는 뷰(내비게이션바 또는 툴바)가 있습니다.
추가로 내비게이션 인터페이스의 변화에 따른 특정 액션을 동작하도록 하기 위해 내비게이션 델리게이트 객체를 사용할 수 있습니다.
# 내비게이션 스택(Navigation Stack)
내비게이션 컨트롤러에 의해 관리되는 내비게이션 스택은 뷰 컨트롤러를 담을 수 있는 배열과도 같습니다.
내비게이션 스택에 가장 하위에 있는(가장 먼저 스택에 추가된) 뷰 컨트롤러는 내비게이션 컨트롤러의 루트 뷰 컨트롤러가 됩니다.
루트 뷰 컨트롤러는 내비게이션 스택에서 팝(pop)되지 않습니다. 내비게이션 스택의 가장 상위(마지막에 푸시 된) 뷰 컨트롤러는 최상위 뷰 컨트롤러로 화면에 보이게 됩니다.
이름에서도 알 수 있듯이 내비게이션 스택은 푸시(push)/팝(pop)을 통하여 아이템(뷰 컨트롤러)을 관리합니다. 새로운 뷰 컨트롤러를 내비게이션 스택에 푸시(push)하거나 내비게이션 스택에 있는 뷰 컨트롤러를 삭제하기 위해 팝(pop)을 사용합니다.
내비게이션 스택에 푸시(push)된 각 뷰 컨트롤러들은 애플리케이션에 자신이 가지고 있는 뷰 계층 구조를 통해 콘텐츠를 표시하게 됩니다.
# 내비게이션 스택에서의 화면이동
UINavigationController 클래스의 메서드 또는 세그(segue)를 사용하여 내비게이션 스택의 뷰 컨트롤러를 추가/삭제할 수 있습니다.
또한 애플리케이션 실행 중 사용자가 내비게이션 인터페이스의 뒤로가기(back) 버튼을 사용하거나 화면의 왼쪽 가장자리를 스와이프(swipe)하여 스택에 있는 최상위 뷰 컨트롤러를 삭제하고 그 아래에 가져져 있던 뷰 컨트롤러의 콘텐츠를 보여줄 수 있습니다.
# 내비게이션 스택의 푸시(push)
내비게이션 스택에 새로운 뷰 컨트롤러가 푸시 될 때 UIViewController 인스턴스가 생성되고 내비게이션 스택에 추가됩니다.
1. 가장 먼저 내비게이션 스택에 루트 뷰 컨트롤러만 들어가 있는 초기상태 입니다. (내비게이션 컨트롤러를 생성할 때 반드시 루트 뷰 컨트롤러가 설정되어 있어야 합니다.)
2. '뷰 컨트롤러1로 이동'이라는 버튼을 통해서 내비게이션 스택에 뷰 컨트롤러1을 푸시(push)합니다. 뷰 컨트롤러1의 인스턴스가 생성되고 내비게이션 스택에 추가됩니다. 뷰 컨트롤러1이 최상위 뷰 컨트롤러로써 화면에 보이게 됩니다.
3. '뷰 컨트롤러2로 이동'이라는 버튼을 통해서 내비게이션 스택에 뷰 컨트롤러2도 푸시합니다. 뷰 컨트롤러2의 인스턴스가 생성되고 내비게이션 스택에 추가됩니다. 뷰 컨트롤러2가 최상위 뷰 컨트롤러로써 화면에 보이게 됩니다. 여기서 주목할 점은 새로운 뷰 컨트롤러가 추가될 때도 아래에 있는 뷰 컨트롤러들이(인스턴스) 삭제되지 않고 유지되고 있다는 점입니다.
# 내비게이션 스택의 팝(pop)
내비게이션 스택에 존재하는 뷰 컨트롤러가 팝 될 때 생성되었던 UIViewController의 인스턴스는 다른 곳에서 참조되고 있지 않다면 메모리에서 해제되고, 내비게이션 스택에서 삭제됩니다.
1. 푸시 예제의 마지막 상태에서 상단 내비게이션바에 있는 뷰 컨트롤러1을(back button) 눌러서 뷰 컨트롤러2를 팝합니다. 뷰 컨트롤러2가 내비게이션 스택에서 삭제됩니다. 뷰 컨트롤러1이 다시 최상위 뷰 컨트롤러로써 화면에 보여지게 됩니다.
2. 내비게이션바에서 루트 뷰 컨트롤러를(back button) 눌러서 뷰 컨트롤러1을 팝합니다. 뷰 컨트롤러1이 메모리에서 해제되고 내비게이션 스택에서 삭제됩니다. 루트 뷰 컨트롤러가 최상위 뷰 컨트롤러가 되고 화면에 보여지게 됩니다. 루트 뷰 컨트롤러는 내비게이션 스택에서 팝 되지 않습니다. 상단에 내비게이션바를 통해서도 루트 뷰 컨트롤러를 팝 하는 버튼이 따로 생성되어 있지 않은 것을 확인할 수 있습니다.
참고 : [edwith 부스트코스] iOS Developer - 내비게이션 인터페이스란?
'iOS' 카테고리의 다른 글
[iOS] Cocoa Touch, Foundation, UIKit Framework에 대해서 (0) | 2020.01.03 |
---|---|
iOS앱 TDD로 개발하기 #1 (1) | 2020.01.03 |
[iOS] H.I.G(Human Interface Guidelines)란? (0) | 2018.05.21 |
[iOS] Foundation이란? (0) | 2018.05.04 |
[iOS] 셀렉터(Selector)란 (0) | 2018.05.02 |