IOS

[IOS] View Controller 화면 전환 및 life cycle

hyukji 2022. 11. 25. 23:12

* 본 포스팅은 패스트캠퍼스의 "30개 프로젝트로 배우는 IOS 앱 개발 with Swift"를 참조하였습니다.

 

View Controller

- Content view controller 

화면을 구성하는 뷰를 직접 구현하고 관련된 이벤트를 처리하는 뷰 컨트롤러

 

- Control view controller(navigation view controller, tabbar controller, ...)

하나 이상의 child view controller가 존재한다. Control view controller은 이들을 관리하고 레이아웃과 화면 전환을 담당하며 child view controller은 화면 구성과 이벤트 관리를 담당한다. 

 

-navigation view controller

계층구조로 구성된 컨텐츠를 순차적으로 보여준다 STACK(filo) 으로 관리하며 마지막에 추가된 뷰 컨트롤러를 화면에 보인다. 이전의 뷰 컨트롤러는 가려지게 되며 뒤로가기 누르면 가려진게 보이도록 작동한다. 이 과정을 push pop 함수로 가능하다.

 

 

화면전환

크게 소스코드와 스토리보드를 사용한 두 가지 방법이 존재한다.

1. 뷰 위에 다른 뷰 가져와 바꿔치기(비추)

 

2. 다른 뷰로 전환하기(=프레젠테이션)

present(이동할 곳, 애니메이션, 전환 완료될때 불릴 함수) -> 비동기이기에 파라3을 이용하는 것이 유용

이전화면 돌아가기 dismiss(애니메이션, 전환 완료될 때 불릴 함수)

 

3. 네비게이션 컨트롤러 사용하기

계층이 있을 때 사용하며 네비게이션 스텍에 push pop 두 개 함수로 작동

pushViewController(뷰 컨트롤러, 애니메이션)

popViewController(애니메이션)

 

4. 화면 전환용 객체 세그웨이 사용

스토리 보드를 통해 출발지 도착지 지정한다. 따로 코드를 사용하지 않아도 화면 전환이 가능하다.

1) Action(trigger) -> 버튼 터치로 세그웨이로 이동

 - Show(nav로 사용시 스텍에 쌓이며 아닐 시 present)

 - show detail(ipad에서는 split구조)

 - present modally(이전 화면을 덮으며 새로운 뷰 등장)

 - present as pop over(팝업)

 - custom

2) Manual  -> 적절한 시점에 세그웨이가 실행돼 화면 전환 일어나게.

 

 

Viewcontroller life cycle

전체적인 흐름 :

viewDidLoad() -> viewWillAppear()-> viewDidAppear() 

viewWillDisappear() ->viewDidDisappear()

 

viewDidLoad()

뷰 컨트롤러의 모든 뷰들이 메모리에 로드됐을 때 호출된다.

처음 로드됬을 때 한번만 호출된다. 즉 이전 화면으로 돌아갈 때는 이미 로드가 완료되어있는 상태이기에 실행되지 않음.

보통 딱 한번 호출되는 행위를 이 매서드에 정의한다(뷰와 관련된 추가적인 초기화 작업, 네트워크 호출과 같은 1회성 작업)

 

viewWillAppear

뷰가 뷰 계층에 추가되고, 화면에 보이기 직전에 매 번 호출

다른 뷰로 이동했다가 돌아오면 재호출

뷰와 관련된 추가적인 초기화 작업 이 매서드에 정의한다.

 

viewDidAppear

뷰 컨트롤러의 뷰가 뷰 계층에 추가된 후 호출

뷰를 나타낼때 추가적인 작업이나 애니메션을 시작하는 작업을 정의

 

viewWillDisappear 뷰가 사라질 것이다.

뷰 컨트롤러의 뷰가 뷰 계층에서 사라지기 전에 호출

뷰가 생성된 뒤 내용을 되돌리는 작업이나 최종적으로 데이터를 저장하는 작업을 정의

 

viewDidDisappear 뷰가 사라졌다.

뷰 컨트럴러의 뷰가 뷰 계층에서 사라진 뒤 호출

뷰가 사라지는 것과 관련된 추가 작업을 정의