본문 바로가기

iOS/iOS개발

[iOS] 뷰 컨트롤러 - TapView, UIViewController 생명주기

다수의 뷰 컨트롤러 사용

탭 뷰 컨트롤러를 사용하여 여러 개의 뷰 컨트롤러를 제어한다.

 

TapView

  • 하나의 화면에 여러 개의 View를 Tab 방식으로 보여주는 것이다.

 

뷰 컨트롤러 뷰

 

class UI View Controller : ... {

  var view: UIView!

...

}

 

 

지연로딩

  • ViewController가 로딩될 때 화면을 보일 필요가 있으면 view를 로딩하는 방법
  • 사용 이유 : 전체 UIViewController 객체 중에 view가 가장 오버헤드가 크기 때문

 

ViewController의 view로딩 방법

  1. 프로그래밍으로 UiViewController의 loadView() 메서드로 오버 라이딩
  2. 인터페이스 빌더에서 스토리보드와 같은 인터페이스 파일 사용

 

스토리보드

  • 다수의 뷰 컨트롤러를 가질 수 있다.
  • 그러나 초기 뷰 컨트롤러 (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 설정

  1. TabBarController에서 Control + Drag 하여 다른 View Controller에 Drop
  2. 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