티스토리 뷰

Multiple MVCs


MVC들을 결합하여 더 큰 어플리케이션을 만들어봅시다.

보라색은 Controller 파란색은 Model 노란색은 View입니다.

한 MVC는 다른 MVC의 뷰로 사용됩니다.

블라인드 통신구조를 통해 다른 MVC와 통신해야합니다.

 

iOS에서는 다른 MVC를 뷰로 가지는 특수 컨트롤러들이 존재합니다.

UITabBarController 

UISplitViewController

 UINavigationController

 

UITabBarController


연락처앱에서 확인 할 수 있는 컨트롤러입니다.

하단에 탭이 있으며 탭 하나당 하나의 MVC를 가집니다.

각 View는 대시보드 영역에 나타나게 됩니다.

탭바의 아이콘과 이름은 UITabbarItem을 통해 변경이 가능합니다.

탭바는 5개까지 구성하고 6개 이상이라면 마지막 탭을 더보기 탭으로 변환됩니다.

탭이 6개이고 More 버튼을 눌렀을시 화면입니다.

일반적으로 5개가 넘는 MVC는 권하지 않는다고 합니다.

아래는 1개는 UITabBarController, 4개는 컨트롤러의 view 역할하는 MVC로 구성되어 있습니다.

 

 

UISplitViewController


두 개의 MVC(Master와 Detail)로 이루어진 컨트롤러입니다.

왼쪽의 작은 뷰를 가지는 MVC를 Master, 우측의 큰 MVC가 Detail로 불립니다.

주로 왼쪽의 마스터가 왼쪽의 디테일에 영향을 주게 됩니다.

아이패드 가로 모드에서 주로 두개의 MVC가 나타나며, 아이패드 세모 모드나 아이폰에서는 Detail만 나타납니다.

아이패드 세로 모드에서 왼쪽 모서리를 안쪽으로 끌면 Master가 나타압니다.

좌측 모서리를 안쪽으로 드래그했을때입니다. 반대로하면 Master가 숨겨집니다.

아이폰에서는 여백이 부족하기 때문에, 밀어내기 기능을 하여도 Master가 나타나지 않습니다.

 

 

UINavigationController


MVC중 가장 유연하고 강력한 MVC이며 iOS 앱에서 가장 쉽게 보았을 것입니다.

NavigationController는 하나의 카드덱으로 생각할 수 있습니다.

MVC를 하나씩 쌓으며 가장 위에 있는 MVC가 화면에 나타납니다.(그 아래의 모든 MVC들은 가려집니다.)

NavigationController는 가장 흔히 사용되는 컨트롤러입니다.

뒤로가기를 누르면 가장 위의 MVC는 버려지며 그 아래의 MVC가 나타납니다.

제목이 Settings로 되어있는데 현재 MVC 따라 바뀔 수 있습니다.

 

UIViewController에는 navigationItem이라는 변수가 있습니다.

여기에서 제목표시줄의 타이틀과 버튼들을 추가할 수 있습니다.

 

다른 뷰 컨트롤러가 Push되었을때 입니다.

General 타이틀을 가진 ViewController로 변경되었습니다.

그리고 이전 화면 이름을 가지는 버튼이 좌상단에 나타났습니다.

(UIViewConroller에는 toolbarItems라는 변수가 존재하며 이를 통해 하단 메뉴 버튼을 추가할 수 있습니다.)

 

UINavigationController는 rootViewController라는 프로퍼티를 가지고 있습니다.

이 프로퍼티를 통해 가장 아래에 위치할 MVC를 지정할 수 있습니다.

(인터페이스 빌더 화면) Segue 지정을 통해 root view controller를 지정할 수 있습니다.

 

일반적으로 뒤로 가기를 누르면 가장 상단에 있던 ViewConroller는 힙에서 사라지게 됩니다.

다른 방법도 있지만 일반적인 방식으로는 사라집니다.

 

자식 ViewConroller에 접근


각 MVC에는 viewConrollers라는 변수가 존재합니다. 옵셔널 타입입니다.(탭바 같은 경우가 있기 때문에)

var viewControllers: [UIViewController]? { get set }

탭바 : 좌측에서 우측순으로 0부터 시작함

스플릿뷰 : [0] 마스터, [1] 디테일

네비게이션 : [0] 루트, 나머지는 스택에 쌓인 순서

 

그렇다면 자식뷰에서는 어떻게 부모 MVC에 접근할까요?

각 UIViewController에는 아래의 변수들이 존재합니다.

var tabBarController: UITabBarController? { get }
var splitViewController: UISplitViewController? { get }
var navigationController: UINavigationController? { get }

위 변수들을 통해 MVC에 접근할 수 있습니다.

 

SplitViewController에서 Detail ViewController를 얻으려면 다음과 같이 작성하면 됩니다.

if let detail: UIViewController? = splitViewController?.viewControllers[1]

 

 

Navigation Controller Push / Pop


네비게이션 뷰 컨트롤러 사용시 MVC를 추가 및 제거 하는 방법입니다.

아래 두 함수를 통해 추가 및 제거가 가능합니다.

func pushViewController(_ vc: UIViewController, animated: Bool) // 가장 위에 MVC 추가
func popViewController(animated: Bool) // 가장 위의 MVC 제거

일반적으로 위 함수를 직접 호출하기 보단 Segue를 사용합니다.

 

 

Wiring up MVCs


스토리보드에서 이 모든 것들을 연결하는 방법을 알아봅시다.

TabBarController,  SplitViewController, NavigationController를 어떻게 MVC에 연결할까요?

답: 인터페이스 빌더에서 Ctrl + Drag

Ctrl+Drag를 통하여 제약사항, 아울렛, 액션등 많은 작업에서 사용할 수 있습니다.

 

예로 SplitViewController를 연결해봅시다.

라이브러리창에서 Split View Controller를 드래그&드랍하여 추가합니다.

Split VIew Controller를 드래그 드랍하여 추가합니다.

 

추가를 하면 여러개의 MVC가 자동으로 추가됩니다.

아래는 Split View Controller 우측에 3개의 MVC가 더 생성되었습니다.

더미로 생성되는 것이니 3개는 모두 삭제합니다.

한번에 4개의 MVC가 생성됩니다.(XCode 버전에 따라 다를 수 있습니다.)

 

삭제 후 Split View Controller만 남은 상태입니다.

SplitViewController 하나만 남아있습니다.

 

이제 연결해봅시다.

SplitViewController에서 마스터로 Ctrl+Drag합니다.

마스터로 사용할 MVC로 Ctrl+Drag시 + 아이콘으로 변경됩니다.

마우스 Up시 팝업 메뉴가 발생하며  Master View Controller를 선택합니다.

버전에 따라 메뉴가 다를수 있습니다. Master View Controller가 없다면 Primary View Conroller를 선택해줍시다.

SplitViewController에서 Dtail View Controller로 Ctrl+Drag합니다.

버전에 따라 메뉴가 다를수 있습니다. Detail View Controller가 없다면 Secondary view controller를 선택 합니다.

마우스 Up시 팝업 메뉴가 발생하며  Master View Controller를 선택합니다.

 

이제 Split View Controller 연결이 완료되었습니다.

'프로그래밍 > 스탠포드 iOS 11' 카테고리의 다른 글

[CHAPTER 6] 멀티터치 (3)  (0) 2022.01.12
[CHAPTER 6] 멀티터치 (2)  (0) 2022.01.11
[CHAPTER 6] 멀티터치  (0) 2022.01.07
[CHAPTER 5] 뷰에 나타내기 (4)  (0) 2022.01.05
[CHAPTER 5] 뷰에 나타내기 (3)  (0) 2022.01.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함