View
이번에 공부한 내용은 네비게이션입니다. 크게 어렵지는 않은 내용이지만, 앱을 만들때 핵심적이고 중요하게 다뤄질 것 같다는 생각이 들어요. 화면 구성의 예시에 대해 보면서, 이 컨트롤러의 사용 방법에 대해 설정화면, 굿노트, 스냅시드처럼 평소에도 유용하게 사용하고 있는 많은 앱들이 떠올랐거든요. 개념적인 면을 잘 잡아두고, 코드로도 이러한 사항들을 예쁘게 구현해봐야겠습니다. ㅋㅋㅋㅋ
네이버나 구글같은데서 검색해서 자료를 보는 것도 좋지만 부스트코스의 무료강의인 iOS 앱개발을 수강해보는 것도 추천합니다! iOS 개발에 대한 내용이나 자료들도 잘 정리해뒀고, Swift를 처음 공부할 사람이 보기에 좋은 문서나 꼭 필요한 내용에 대한 설명,링크를 달아두어 공부하는데 도움이 많이 돼용!
네비게이션
네비게이션 컨트롤러는 여러 네비게이션 인터페이스를 구현할 수 있습니다. iOS에서 주로 사용하는 방식은 계층구조에서 활용하는 드릴 다운 인터페이스입니다.
네비게이션 컨트롤러
네비게이션 자체가 화면에 대한 관리를 담당하기 때문에, 네비게이션 컨트롤러는 화면을 나타내주는 뷰 컨트롤러를 관리하는 역할을 담당합니다. 뷰를 네비게이션 스택에 담아둘 수 있기때문에, 네비게이션 컨트롤러는 컨테이너 뷰 컨트롤러이기도 합니다. 이 컨테이너 (네비게이션 스택)에 담기는 뷰 컨트롤러들을 컨텐츠 뷰 컨트롤러라고 부릅니다.
이 네비게이션 컨트롤러는 뷰를 2개 화면위에 표시하는데, (네비게이션 스택에서)가장 위에 있는 뷰를 보여주고 네비게이션이나 특정 역할을 담당하는 뷰를 함께 보여줘요. 그래서 다음과 같은 화면이 보여질 수 있는것이죠!
찾아보니 상단에 나타나는 것이 네비게이션 뷰, 하단에 나타나는 것이 탭바 뷰로 서로 다른 것이였네요. 글 수정했습니다.
네비게이션 스택은 뭘까
간단하게 말하자면, 화면을 스택구조로 담아놓은 것이라 볼 수 있겠네요. 여기에서도 Push와 Pop의 기능은 스택의 First-In-Last-Out 특성을 따라 똑같이 작용합니다. 각자의 뷰 컨트롤러들이 자신이 나타낼 화면을 가지고있고, 스택의 맨 위에 있으면 화면에 그 정보를 보여줄 수 있는거죠. 여기에서 가장 아래에 있어서 빠져나오지 못하는 (Pop될 수 없는) 특별한 뷰 컨트롤러를 '루트 뷰 컨트롤러'라고 말합니다.
UINavigationController 클래스에 있는 메서드를 활용하거나 세그(segue)를 이용해 네비게이션 스택에 뷰 컨트롤러를 push / pop 할 수 있어요. 또, 네비게이션 인터페이스에 있는 뒤로가기나 제스쳐를 이용해 맨 위의 뷰 컨트롤러를 pop하여 뒤에 있는 컨텐츠를 보여줄 수도 있습니다.
segue(세그웨이)는 코드로 작성하여 뷰를 관리하는 방식이 아니라, Storyboard 상에서 push / replace / modal / popover 등의 옵션으로 뷰를 관리하는 것으로 보이네요. 후에 사용할 기회가 있으면, 또는 유용하다면 그에 대한 내용을 포스팅할게요!
네비게이션 컨트롤러와 관련된 메서드
UINavigationController에서 네비게이션 컨트롤러와 스택의 메서드들을 확인할 수 있습니다. 메서드 시그니처에서 함수의 이름, 인자의 별명을 통해 어떤 역할을 하는 메서드인지 쉽게 파악할 수 있어서 사용에 있어서 큰 무리는 없어보이네요 ㅋㅋㅋ.
네비게이션 바
네비게이션 바는 항상 해당 네비게이션 컨트롤러의 영향을 받는, 관리를 받는 뷰의 상단에 보여집니다. 만약에 스택 맨 위에 있는 뷰 컨트롤러가 변경되면, 네비게이션 바 역시 컨트롤러가 계속해서 업데이트를 시켜줍니다. 이 네비게이션 바는 타이틀과 아이템으로 구성되어 있고, 각 뷰에 맞게 네비게이션 타이틀과 아이템이 맞추어져있기에 이들을 담는 스택도 함께 만들어져있습니다. 단, 주의할 점은 여러 개의 네비게이션 바가 스택에 담기는 것이 아니라, 하나의 네비게이션 바에 스택에 담겨있던 아이템들을 이용해 나타낸다는 점입니다.
'Develop > iOS 개발' 카테고리의 다른 글
[iOS 앱 개발 - Swift] 모달이 뭘까? ( Modal ) (1) | 2019.08.04 |
---|---|
[iOS 앱개발 - Swift] 네비게이션 컨트롤러(드릴-다운 인터페이스) 구현해보기 (0) | 2019.08.02 |
[iOS 앱 개발] Human Interface Guideline - App Architecture (2) (0) | 2019.07.31 |
[iOS 앱 개발] Human Interface Guideline - App Architecture (1) (1) | 2019.07.30 |
[Swift 기본 문법] Swift를 처음봤을 때 낯선 문법들 (1) | 2019.07.29 |