다수의 뷰 컨트롤러 사용
탭 뷰 컨트롤러를 사용하여 여러 개의 뷰 컨트롤러를 제어한다.
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
https://jellysong.tistory.com/62
https://one10004.tistory.com/121
'iOS > iOS개발' 카테고리의 다른 글
[iOS]텍스트 입력, Delegate (1) | 2022.10.22 |
---|---|
[iOS] 뷰와 뷰의 계층구조 (1) | 2022.09.24 |
[iOS] MVC구조와 오토레이아웃 / Xcode구조 (1) | 2022.09.22 |