일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- struct
- instance
- Swift
- delegate
- String
- Method
- extension
- Terminal
- Unicode
- 이니셜라이저
- property
- enum
- tuist
- initalizer
- initializer
- interpace
- Class
- url
- IOS
- optional
- 디자인패턴
- Xcode
- 코딩테스트
- type
- Protocol
- UIKit
- Git
- Foundation
- 스위프트
- init
Archives
- Today
- Total
아리의 iOS 탐구생활
[iOS/UIKit] ViewController와 종류 본문
반응형
# ViewController
- ViewController는 앱의 근간을 이루는 객체로 모든 앱은 최소한 하나 이상의 ViewController를 가지고 있다.
- 주된 역할은 화면 구성 요소들, 즉 뷰를 관리 하는거지만 화면과 데이터 사이의 상호 작용 관리까지 한다.
- 윈도우 객체로 부터 전달된 이벤트를 받아서 내부적으로 구현된 비즈니스 로직을 실행하고, 그 결과로 얻어진 데이터를 콘텐츠를 만들어 화면에 표현하는 등 모바일 애플리케이션에서 뷰 컨트롤러는 우리가 하는 대부분의 작업들의 중심에 있다.
- ViewController는 여러가지 종류가 있는데,
- ViewController, Navigation Controller, TableView Controller, TabBar Controller, Split ViewController, CollectionView Controller …. 등이 있다.
## ViewController
- iOS에서 가장 기본이 되는 컨트롤러로서 앱의 데이터를 표시될 외형을 연결해서 하나의 동적인 화면을 만들어 낸다.
- 내부에 뷰를 포함하므로 원하는대로 화면을 직접 구상하고 컨트롤러들을 배치할 수 있다.
- 이 컨트롤러에 연결될 클래스는 작성하려면 반드시 UIViewController 클래스를 상속받아야 한다.
## Navigation Controller
- 앱의 화면 이동에 대한 관리와 그에 연관된 처리를 담당해주는 컨트롤러
- 내부적으로 다른 컨트롤러를 포함하여 컨트롤러끼리 화면 이동을 처리해주고 현재의 페이지 위치에 대한 네비게이션 역할을 한다.
- 이 컨트롤러가 추가된 앱 상단에는 네비게이션 바가 추가된다.
- 네비게이션 컨트롤러를 정의하는 UIKit 프레임워크의 클래스는 UINavigationController이다. 직접 구현하고자 한다면 클래스를 상속받아야 한다.
- 뷰를 포함하고 있지 않으므로 하나의 화면을 담당하지 못하고, 다른 컨트롤러와 결합하여 부분적으로 화면을 구성한다. 스토리 보드에는 아래 사진 처럼 2개의 화면이 구성되어 있으나 실제로는 하나의 화면으로 나타난다. 즉, 오른쪽에 있는 컨트롤러만 화면에 나타난다.
## TableView Controller
- 내부에 리스트 형식의 테이블 뷰를 포함하고 있어 여러 항목이나 데이터를 화면에 나열하기 위한 목적으로 사용되는 컨트롤러이다.
- 하나의 컨트롤러가 하나의 화면을 이루는 단위 컨트롤러이다
- UIKit 프레임워크의 클래스는 UITableViewController 클래스이다. 해당 화면을 구성하기 위해서는 UITableViewController 클래스를 상속받아 추가 구현하는 작업이 필요하다.
- 대표적으로 아이폰 기본앱 중에 설정이 있는데 아래처럼 여러항목이 화면에 나열되어 있는 것을 볼 수 있다.
## TabBar Controller
- 화면을 나타내는 여러개의 탭이 있고, 탭을 터치하면 해당하는 화면이 전환되는 형태의 앱을 만들고자 할때 사용하는 컨트롤러이다.
- 탭마다 다른 뷰 컨트롤러를 연결하여 화면을 구성하며 직접 화면 전체를 나타내는 것이 아닌 복잡적으로 화면을 구성하는 역할을 한다. (네비게이션과 마찬가지)
- iOS앱에서 시계 기본앱을 키면 밑에 시계알림, 알람, 스톱워치, 타이머 탭들이 있는데 이런 구성을 하는게 TabBar Controller이다.
- 탭바 컨트롤러에 해당하는 UIKit 프레임워크의 클래스는 UITabBarController 이다.
## Split ViewController
- 목록을 나열하는 마스터 페이지와 그 목록에 각각에 대한 세부 내용을 보여주는 디테일 페이지로 구성되는 Split ViewController는 화면 크기에 따라 두 페이지를 하나의 화면에 조합하여 보여줄 것인지 아니면 두개의 화면으로 나누어 보여줄 것인지 자동으로 처리해주는 특징이 있습니다. (아이폰에서는 잘 안쓰는 컨트롤러)
- 아이패드 설정에서 볼 수 있는 화면이 스플릿 뷰 컨트롤러이다.
- Split ViewController에 해당하는 UIKit 프레임워크의 클래스는 UISplitViewController 클래스이지만, 직접적인 화면을 구현하지는 않는다.
- 마스터/디테일 페이지로 사용할 뷰 컨트롤러들을 화면의 크기에 따라 적절히 조합해주는 역할을 한다.
# View의 관리
View의 계층을 관리하는 역할을 알아보자.
- ViewController에는 컨트롤러 내부에 모든 객체의 대장인 루트뷰 하나이다. 이 루트뷰는 일반뷰, 테이블뷰, 컬렉션뷰 등 다양한 뷰가 루트뷰로 지정해줄 수 있다.
- 스토리보드에서 ViewController 위에 배치하는 대부분의 객체들은 실제로는 모든 루트뷰에 추가되는 서브뷰라고 할 수 있다.
- 뷰들의 구조는 루트뷰의 서브뷰, 서브뷰의 서브뷰로 계층을 이루고 있다
- 우리는 개발을 할 때 항상 모든 객체를 루트뷰 혹은 그 아래에 추가해야 한다. 루트뷰 없이 곧바로 ViewController에 객체를 추가할 수는 없다.
- 루트뷰의 설정 확인 방법은 스토리보드 맨 앞에 화살표가 있으면 루트뷰가 설정되어 있는 것이다.
- ViewController에는 Root View가 연결되어 있고 그아래에 서브뷰들이 이어져있다. 이렇게 체인처럼 ViewController 부터 가장 하위의 서브뷰에 이르기까지 계층 구조를 따라 참조가 이어지고 있다.
- 이 때문에 ViewController가 하위의 모든 뷰에 대한 참조를 가지고 있지 않아도 모든 뷰에 접근할 수 있다. (체인처럼 참조가 이어지고 있어서)
- 우리는 ViewController를 통해 뷰를 통제하고 뷰가 사용자와 상호작용할 수 있도록 필요한 코드륿 뷰 컨트롤러에 작성을 한다.
Reference
반응형
'Swift > iOS' 카테고리의 다른 글
[iOS/UIKit] ViewController의 Life cycle (0) | 2021.10.22 |
---|---|
[iOS/UIKit] Navigation Controller 맛보기 (0) | 2021.10.22 |
[iOS/UIKit] Storyboad Segue에 대해서 알아보자 (0) | 2021.10.21 |
[iOS/UIKit] Alert 알림창을 만들어보자 (0) | 2021.10.21 |
[iOS/Swift] MVC (Model-View-Controller) (0) | 2021.10.20 |
Comments