UINavigationController, ViewController Life Cycle (LEDBoard)

LED

배울 기술

  • UINavigationController
  • 화면 전환 개념
  • ViewController Life Cycle
  • 화면간 데이터 전달 하는 방법
  • 에셋 카탈로그

UINavigationController

  • Content View Conroller : 화면을 구성하는 뷰를 직접 구현하고 관련된 이벤트를 처리하는 뷰 컨트롤러
  • Container View Controller : 하나 이상의 Child View Conroller를 가지고 있다. 레이아웃하고, 화면 전환을 담당한다.
  • 화면 구성과 이벤트 관리는 child view Controller에서 한다.
  • 대표적으로 Navigation Controller 와 TabBar Controller가 있다.

계층 구조로 구성된 content를 순차적으로 보여주는 container view controller

Navigation Stack 을 가짐

Navigation Bar를 가짐. backItem ,topItem prompt, topItem Title, topItem rightBarButtonItem 등을 구성요소로 가진다.

화면 전환 개념

3가지 정도 사용됨.

  • View Controller 에서 다른 View Controller를 호출하여 전환하기 (프레젠테이션 방법) → 비동기로 동작함 (화면을 덮고, 걷어내는 개념)
  • Navigation Contoller 를 사용하여 화면 전환하기 ( stack 으로 push, pop 하는 방식)
  • 화면 전환용 객체 세그웨이(Segueway)를 사용하여 화면 전환하기, strory board 이용 화면과 화면 사이에 SegueWay 객체를 둠

ViewContoller Life Cycle

  • Appearing : 뷰가 화면에 나타나는 중
  • Appeard: 뷰가 화면에 나타나는게 완료 된 상태
  • Disappearing: 뷰가 화면에서 사라지는 중
  • Disappeared: 뷰가 화면에서 사라진 상태

관련 메서드

viewDidLoad()

  • 뷰 컨트롤러의 모든 뷰들이 메모리에 로드됐을 때 호출(메모리 처음 로드시 한번만 호출)
  • 보통 딱 한번 호출될 행위들을 이 메소드 안에 정의 함
  • 초기화나, 네트워크 호출등의 작업

viewWillAppear()

  • 뷰가 뷰 계층에 추가 되고, 화면에 보이기 직전에 매 번 호출
  • 다른 뷰로 이동했다가 다시 오면 다시 호출
  • 뷰와 관련된 추가적인 초기화 작업을 여기서

viewDidAppear()

  • 뷰가 뷰 계층의 추가된 후 호출
  • 뷰를 나타낼때 필요한 추가 작업을 여기서(애니메이션 시작 작업 등..)

viewWillDisappear()

  • 뷰 컨트롤러의 뷰가 뷰 계층에서 사라지기 전에 호출
  • 작업한 내용을 되돌리거나, 데이터를 저장하는 작업

viewDidDisappear()

  • 뷰 컨트롤러의 뷰가 뷰 계층에서 사라진 뒤에 호출
  • 뷰가 사라지는 것과 관련된 추가 작업

화면간 데이터를 전달하는 방법

  • viewController 프로퍼티를 생성하고 → viewContoroller를 인스턴스화 해서 사용하는 변수에 타입 케스팅을 한 다음 → 프로퍼티를 추가하는 형태로 데이터를 전달 할 수 있다.
  • 반대로 뒤로 가기 할때나 pop 할때 전달하는 법 : delegate 패턴을 활용한다. (다른 객체에게 자신의 일을 위임하는 형태의 디자인 패턴)
  • delegate 변수를 사용할때에는 week 키워드를 사용해서 강한 순환 참조를 막는다. → 데이터를 전달하는 곳에서 delegate 프로토콜을 만들고 전달받을 뷰에서 프로토콜을 준수하게 하면 전달하는 곳에서 메서드가 실행되게 할 수 있다.
  • 리엑트에서 부모 요소에서 실행할 메서드를 자식에게 props로 전달해서 실행 시키는것과 비슷하다.
  • 세그웨이를 사용할때에는 prepare 메서드를 사용해서 시스템에 의해서 호출될 수 있도록 해서 전달한다

에셋 카탈로그

Assets 폴더 안에 리소스를 추가할 수 있다. 리소스 추가 시에 1x 2x 3x 등의 크기에 이미지를 넣어주어야 하는데 이는 다양한 해상도의 깨지지 않는 이미지를 제공하기 위해서이다.

기타

  • action 함수에서 sender 변수를 이용해서 어떤 인스턴스에서 발생한 액션인지 알 수 있다.