A container view controller that defines a stack-based scheme for navigating hierarchical content.
- iOS에서 내비게이션 인터페이스는 주로 계층적 구조의 화면전환을 위해 사용되는 드릴 다운 인터페이스(drill-down interface)이다.
- 드릴 다운 인터페이스란 각 선택할 수 있는 항목에 대한 세부항목이 존재하는 인터페이스이다.
- 내비게이션 컨트롤러는 navigation stack(내비게이션 스택)을 사용하여 다른 뷰 컨트롤러를 관리한다.
- navigation controller는 두 개의 뷰를 화면에 표시한다. 하나는 내비게이션 스택부에 포함된 최상위 컨텐츠 뷰 컨트롤러의 콘텐츠를 나타내는 뷰와 내비게이션 컨트롤러가 직접 관리하는 뷰가 있다.
- 내비게이션 컨트롤러에 의해 관리되는 내비게이션 스택은 뷰 컨트롤러를 담을 수 있는 배열과도 같다.
- 내비게이션 스택에 가장 하위에 있는(가장 먼저 스택에 추가된) 뷰 컨트롤러는 내비게이션 컨트롤러의 루트 뷰 컨트롤러(root view controller)가 된다.
- 루트 뷰 컨트롤러는 내비게이션 스택에서 팝(pop)되지 않으며, 내비게이션 스택의 가장 상위에 있는(가장 마지막에 푸시(push) 된) 뷰 컨트롤러는 최상위 뷰 컨트롤러로 화면에 보이게 된다.
- 이름에서도 알 수 있듯이 내비게이션 스택은 push/pop을 통하여 뷰 컨트롤러를 관리한다.
init(rootViewController: UIViewController)
// 내비게이션 스택에 있는 최상위 뷰 컨트롤러에 접근하기 위한 프로퍼티
var topViewController: UIViewController?
// 현재 내비게이션 인터페이스에서 보이는 뷰와 관련된 뷰 컨트롤러에 접근하기 위한 프로퍼티
var visibleViewController: UIViewController?
// 내비게이션 스택에 특정 뷰 컨트롤러에 접근하기 위한 프로퍼티 (루트 뷰 컨트롤러의 인덱스는 0)
var viewController: [UIViewController]
func pushViewContrller(UIViewController, animated: Bool)
func popViewController(UIViewController, animated: Bool)
// 루트 뷰 컨트롤러를 제외한 모든 뷰 컨트롤러 팝
// 삭제된 모든 뷰 컨트롤러의 배열을 반환한다.
func popToRootViewController(animated: Bool) -> [UIViewController]?
// 특정 뷰 컨트롤러가 내비게이션 스택에 최상위 뷰 컨트롤러가 되기 전까지 상위의 있는 뷰 컨트롤러 팝
func popToViewController(_ viewController: UIViewController, animated: Bool) -> [UIViewController]?
- 코드로 내비게이션 컨트롤러를 생성할 경우, 내비게이션 컨트롤러가 생성되기 원하는 적절한 지점에 내비게이션 컨트롤러를 생성할 수 있다.
- 예를 들어 내비게이션 컨트롤러가 애플리케이션 윈도우의 루트 뷰로서 역할을 한다면, 내비게이션 컨트롤러를
applicationDidFinishLaunching:
메서드에 구현할 수 있다.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let rootViewController = UIViewController()
let navigationController = UINavigationController(rootViewController: rootViewController)
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = navigationController
self.window?.makeKeyAndVisible()
return true
}
- https://www.boostcourse.org/mo326/lecture/16857?isDesc=false
- https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html
- https://developer.apple.com/documentation/uikit/uinavigationcontroller
- https://developer.apple.com/documentation/uikit/uinavigationbar
- #IOS/UINavigationController