다수의 뷰 컨트롤러 사용
탭 뷰 컨트롤러를 사용하여 여러 개의 뷰 컨트롤러를 제어한다.
TapView
- 하나의 화면에 여러 개의 View를 Tab 방식으로 보여주는 것이다.
뷰 컨트롤러 뷰
class UI View Controller : ... {
var view: UIView!
...
}

지연로딩
- ViewController가 로딩될 때 화면을 보일 필요가 있으면 view를 로딩하는 방법
- 사용 이유 : 전체 UIViewController 객체 중에 view가 가장 오버헤드가 크기 때문
ViewController의 view로딩 방법
- 프로그래밍으로 UiViewController의 loadView() 메서드로 오버 라이딩
- 인터페이스 빌더에서 스토리보드와 같은 인터페이스 파일 사용
스토리보드
- 다수의 뷰 컨트롤러를 가질 수 있다.
- 그러나 초기 뷰 컨트롤러 (initial view controller)는 1개이다.

뷰 컨트롤러 추가하기
Main.stroyboard > 객체 라이브러리에서 View Controller > 캔버스에 drag & drop
UIView 대신 MKMapView로 변경 > ViewController밑의 view 삭제 > 객체 라이브러리에서 Map Kit View를 View Controller밑에 drag & drop
초기 뷰 컨트롤러로 설정하는 법
Attribute Inspector에서 View Controller의 Is Initial View Controller체크

- 실행화면

동작방법

- UIWindow : 전체 화면
- rootViewController : 이것과 연결된 뷰 컨트롤러가 가장 먼저 로딩된다.

앱의 Main Interface에서 지정된 스토리보드의 초기 뷰 컨트롤러가 제일 먼저 실행된다.
- Project → Target 에서 원하는 앱 선택 → Deployment Info에 있는 Main Interface
UITabBarController
UITabBarController
- 사용자가 View Controller를 화면에서 변경할 수 있는 방법 중 하나이다.
- 다중 선택 인터페이스를 관리하는 컨테이너 보기 컨트롤러이다.
- Tab bar는 앱 화면의 하단에 위치하며, 사람들이 다른 섹션들 간 전환을 빠르게 하도록 한다
UITabBarController 설정
Storyboard에서 ViewController선택 > Editor메뉴 > Embed in > Tab Bar Controller

UITabBarController에 다른 View Controller 설정
- TabBarController에서 Control + Drag 하여 다른 View Controller에 Drop
- Relationship Seque에서 view controllers를 선택


Tap Bar Item
TapBar Item
탭 바에서 각 아이템에 대하여 icon과 이름을 표시할 수 있다.

Icon Copy
이미지를 에셋 카탈로그에 복사하여 아이콘으로 사용할 수 있다.

icon의 적용
ViewController의 ItemBar 선택 > Attribute Inspector선택 > 제목과 아이콘 수정


로드된 뷰와 뷰 나타내기
MapViewController.swift 생성
import UIKit
class MapViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("MapViewController loaded its view")
}
}
Stroyboard에서 ViewController를 선택 > Identity Inspector의 Custom class에서 class를 MapViewController로 설정

UIViewController 생명주기

init
- init(coder: ) : 스토리보드에서 view Controller의 인스턴스를 생성할 때 호출된다
- init(nibName: bundle: ) : 스토리보드 없이 view controller를 생성할 때, 몇몇 프로그램에서 하나의 view controller에 대하여 동적으로 인스턴스를 생성할 때 사용한다
- init(nibName:bundle) : xib 파일을 이용한 view controller (VC) 생성에 사용된다
> nib 은 xib 혹은 storyboard 파일의 빌드의 결과물이다.
loadView()
- 뷰가 loading 된 직후 호출되며 오직 한 번만 호출된다.
viewDidLoad()
- 뷰 컨트롤러를 생성했을 때 자동으로 생성되어 있는 메서드이며, 뷰가 메모리에 로드되었을 때 호출되는 메서드이다.
- 딱 한번 호출되며, 일반적으로 초기화 작업을 수행할 때 사용된다.
viewWillApear(_:)
- 뷰가 이제 화면에 나타날 거라는 신호를 컨트롤러에게 알리는 역할을 하는 메서드이며, 뷰 컨트롤러가 화면에 나타날 때마다 반복된다.
- 뷰가 화면에 표시되기 전에 처리해야 하는 작업이 있을 때 사용된다.
viewDidAppear(_:)
- 뷰 컨트롤러에게 해당 뷰가 뷰의 계층 구조에 추가되었음을 알리는 메서드이며, 뷰가 화면에 나타났음을 말한다.
- 뷰가 화면에 나타난 즉시 호출된다.
viewWillDisappear(_:)
- 뷰 컨트롤러에게 해당 뷰가 뷰의 계층 구조에서 제거되려 함을 알리는 메서드이다.
- 데이터를 저장하는 작업을 할 때 사용된다.
viewDidDisappear(_:)
- 뷰 컨트롤러의 뷰가 뷰 계층에서 사라진 뒤에 호출되는 메서드이다.
https://woozzang.tistory.com/168
[iOS] init(nibName:bundle:)과 init?(coder:) 알아보기
안녕하세요🐶 이번 시간에는 UIViewController 의 두 생성자에 대해서 알아보겠습니다. 이 글을 통해 생성자가 언제 어떻게 사용되는지 알게되었으면 좋겠습니다! UIViewController 문서에서 제공하는 Vi
woozzang.tistory.com
https://jellysong.tistory.com/62
[iOS/Swift] Tab Bar - UITabBar, UITabBarController
💡 Tab Bar Tab bar 는 앱 화면의 하단에 위치하며, 사람들이 다른 섹션들간 전환을 빠르게 하도록 한다. 일반적으로 다른 종류의 정보들을 보여줄 때, 혹은 같은 정보를 완전히 다른 스타일로 보여
jellysong.tistory.com
https://one10004.tistory.com/121
[iOS] ViewController의 생명주기(Life Cycle)
View Contoller의 생명주기 앱은 보통 하나 이상의 화면들로 구성되어 있다. 즉 앱에는 하나 이상의 'View Controller'가 존재하는 것이다. 각각의 뷰 컨트롤러는 생명주기를 갖고 있다. 여기서 생명주기
one10004.tistory.com
'iOS > iOS개발' 카테고리의 다른 글
[iOS]텍스트 입력, Delegate (1) | 2022.10.22 |
---|---|
[iOS] 뷰와 뷰의 계층구조 (1) | 2022.09.24 |
[iOS] MVC구조와 오토레이아웃 / Xcode구조 (1) | 2022.09.22 |