[iOS] UINavigationController 공식문서 톺아보기

Minw·2024년 3월 28일

iOS

목록 보기
1/7

안녕하세요!
오늘은 UINavigationController에 대해 알아보려고 합니다

틀린내용과 오역이 있을수도 있으니... 많은 피드백 부탁드려요!!

1. UINavigationController

먼저 공식문서를 살펴보면

A container view controller that defines a stack-based scheme for navigating hierarchical content.
A navigation controller is a container view controller that manages one or more child view controllers in a navigation interface.

navigating 계층 컨텐트를 위한 스택 기반으로 정의된 컨테이너 뷰 컨트롤러이다. 네비게이션 컨트롤러는 네비게이션 인터페이스에서 하나 이상의 child view 컨트롤러들을 관리하는 뷰컨트롤러의 컨테이너이다.

라고 되어있습니다.

여기서 주목할 점은 뷰컨트롤러들을 담는 스택기반의 컨테이너라는 것!

스택이라면 push와 pop을 이용해 데이터를 저장할 수 있죠? 그럼 위의 문서를 읽었을 때 드는 생각은 바로
"뷰컨트롤러들을 푸쉬와 팝을 이용해서 스택에 저장할 수 있나?"

네 정답입니다!

이제 '네비게이션 컨트롤러가 뭔지는 대충 알겠는데 어디에 쓰이는 놈인가..?' 하니 실제 사용하는 곳을 보여드리자면

바로 아이폰의 설정화면에서 찾아 볼 수 있는 이 구조입니다!

Setting이라는 타이틀을 가지고 있는 뷰 컨트롤러에서 General 탭을 누르면 General 화면이 보이게 되고 거기서 또 Auto-Lock을 누르게 되면 Auto-Lock 화면이 보이게 되죠?

여기서 퀴즈~
아이폰의 화면에서 세 화면이 동시에 다 보일까요? 아니면 마지막에 선택한 화면만 보일까요?
너무 쉬운 퀴즈인가요.. 당연히 마지막에 선택한 화면만 아이폰의 화면에 나타게 되겠죠?
갑자기 웬 퀴즈냐라고 물으신다면 다시 공식문서를 살펴보도록 하죠

In this type of interface, only one child view controller is visible at a time.

경험적으로도 알 수 있듯이 마지막으로 푸쉬된 즉, 스택의 최상단에 있는 뷰 컨트롤러만 화면에 보여진다라는 이야기가 되겠습니다.

그럼 다시 네비게이션 컨트롤러의 예시로 돌아가면
네비게이션 컨트롤러는 스택기반의 뷰 컨트롤러들의 컨테이너라고 했죠?
Setting 화면이 스택의 가장 아래에 있는 뷰컨이고
General 화면과 Auto-Lock 화면이 순서대로 스택에 push되는 구조인거 아시겠나요??

다시 정리하자면
UINavigationController는 스택기반으로 뷰컨트롤러들을 관리하는 컨테이너다! 정도로 기억해둡시다!

추가로 처음으로 푸쉬된 즉, 스택의 최하단에 있는 뷰컨트롤를 rootViewcontroller 라고 합니다.
그럼 이제 UINavigationController에 대해 자세히 뜯어봅시다!

2. UINavigationController의 구조

이 사진을 보아하니 UINavigationController는
1. viewControllers
2. navigationBar
3. toolbar
4. delegate
로 구성되어 있음을 알 수 있습니다

뭔가 색다른게 보이지 않나요?
바로 viewControllers 라는 건데요 viewController는 봤어도 복수형은 생소하실 것 같은데요

아까도 말했듯이 UINavigationController는 스택기반으로 뷰 컨트롤러들을 관리하는 컨테이너입니다.

그러면 viewControllers(NSArray)가 뭔지 대충 감이 오시나요?
네 바로 현재 navigation stack에 있는 뷰컨트롤러들을 의미합니다!
자세한 내용은 공식문서에 잘 설명되어 있으니 참고하세요!
https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621873-viewcontrollers

viewControllers | Apple Developer Documentation
The view controllers currently on the navigation stack.
developer.apple.com

그 다음으로 볼 건 navigationBar인데요
공식문서를 먼저 보면

A UINavigationBar object is a bar, typically displayed at the top of the window, containing buttons for navigating within a hierarchy of screens. The primary components are a left (back) button, a center title, and an optional right button. You can use a navigation bar as a standalone object or in conjunction with a navigation controller object.

네비게이션 바 object는 윈도우 상단에 표시되는 바로서, 화면 계층구조에서 탐색을 위한 버튼을 포함한다. 주요 컴포넌트는 left (back)버튼, 중앙의 타이틀, optional한 오른쪽 버튼이다. 네비게이션 바는 독립적인 객체로(Navigation Controller 없이) 사용하거나 네비게이션 컨트롤러 객체와 함께 사용할 수 있다.

라고 하는데요.. 예시를 보면 바로 알 수 있습니다!

위의 아이폰 설정 화면에서 General, Auto-Lock 화면의 상단에 보이는 Bar가 바로 navigationBar 입니다!
일반적인 앱들을 보면 navigationBar에는 1) 뒤로가기 2) 타이틀 3) 기타 기능이 있는 버튼들
이런식으로 구성이 되어 있습니다. 이제 감이 좀 오시나요?

네비게이션 바는 바로 이렇게 구성이 되어 있습니다

left button, center title, right button을 통틀어 navigationItem이라고 하는데요.
이 navigationItem은 당연히 커스텀이 가능합니다!
네비게이션 바에 대한 자세한 내용과 커스텀하는 예제 코드는 나중에 같이 보도록 하죠!

References
https://developer.apple.com/documentation/uikit/uinavigationcontroller
https://developer.apple.com/documentation/uikit/uinavigationbar

0개의 댓글