iOS/Swift

뷰 컨트롤러 직접 호출에 의한 화면 전환

kihun5393 2021. 8. 9. 16:44

뷰 컨트롤러에서 직접 호출하는 방식을 프레젠테이션 방식이라고 합니다.

구현하는 방법을 알아보겠습니다.

 

뷰 컨트롤러 호출 구현

화면 UI 구성

이동할 뷰 컨트롤러에 Storyboard ID 지정

화면 전환을 구현할 버튼 객체 선언 및 뷰컨트롤러 호출 구현

@IBAction func moveNext(_ sender: Any) {
  // 이동할 뷰 컨트롤러 객체를 StoryBoardID 정보를 이용하여 참조
  let uvc = self.storyboard!.instantiateViewController(withIdentifier: "SecondVC")

  // 화면 전환할 때의 애니메이션 타입
  uvc.modalTransitionStyle = UIModalTransitionStyle.coverVertical

  // 인자값으로 뷰 컨트롤러 인스턴스를 넣고 프레젠트 메소드 호출
  self.present(uvc, animated: true)
}

 

이전 화면으로 돌아가기

뷰 컨트롤러 파일 만들기

SecondViewController.swift 파일 생성 후 UIViewController 상속

 

두번째 화면에 뷰 컨트롤러 할당

SecondViewController 에 이전 페이지 메소드 구현

import UIKit

class SecondViewController: UIViewController {
    
    @IBAction func back(_ sender: Any) {
    	// dismiss 로 호출 해제
        self.presentingViewController?.dismiss(animated: true)
    }
}

 

호출을 구현할 때에는 주체가 뷰 컨트롤러 자신이지만, 

self.present(uvc, animated: true)

호출을 해제(dismiss)할 때에는 호출을 한 대상(이전 ViewController)에게 요청하는 것이다.

self.presentingViewController?.dismiss(animated: true)

 

이전 화면과 이후 화면은 서로 참조 관계에 있다.

이전 화면(ViewController)은 presentedViewController 속성에 저장되 있는 포인터를 통해 이후 화면(SecondViewController)을 참조하고, 이후 화면(SecondViewController)는 presentingViewController 속성에 저장되 있는 포인터를 통해 이전 화면(ViewController)를 참조하게 된다.