개발일기/IOS

[Swift] - ViewController 화면전환

코딩하는빵친자 2024. 3. 15. 13:30

presentedViewController, presentingViewController의 차이에 대해 보도록 하자.


핵심만 먼저 말하면 presentedViewController는 지금 ViewController가 띄우는ViewController,

presentingViewController는 지금 ViewController를 띄우는 ViewController다.

즉 ViewController A, B, C가 있다고 하고 A가 present로 B를 띄우고, B에서 present로 C를 띄운다고 하면

B의 presentedViewController는 C, presentingViewController는 A가 된다.

이제 가장 큰 차이를 알았으니 개념에 대해 좀 더 자세히 보도록 하겠다.

 

presentedViewController

애플의 공식문서에 따르면

presentedViewController는 인스턴스 프로퍼티로, 이(현재) ViewController에 의해 present된 View Controller를 의미한다. 혹은 뷰 컨트롤러 계층에서의 조상 중 한명이 된다.

만약 뷰 컨트롤러를 present(_:animated:completion:) 메서드를 이용해서 명시적으로나 암묵적으로나 modal처럼 뷰 컨트롤러를 띄우면, 이 메서드를 호출한 뷰컨트롤러의 이 프로퍼티는 present한 view controller가 된다. 만약 현재 뷰 컨트롤러가 다른 뷰 컨트롤러를 modal로 띄우지 않는다면, 이 프로퍼티의 값은 nil이 된다.

 

presentingViewController

얘도 마찬가지로 인스턴스 프로퍼티로, 이 뷰 컨트롤러를 띄운 뷰 컨트롤러를 의미한다.

위의 애와 반대로, 만약 뷰 컨트롤러를 present 메서드를 이용해서 present했을 때, 보여진 뷰 컨트롤러의 이 프로퍼티는 이 뷰 컨트롤러를 띄운 뷰 컨트롤러로 맞춰진다.

만약 뷰 컨트롤러가 modal로 띄워지지 않았지만 조상 중 하나는 띄워졌을 때, 이 프로퍼티는 조상을 띄운 뷰 컨트롤러를 포함한다. 만약 현재 뷰 컨트롤러나 이 조상들중 하나도 modal로 띄워지지 않았다면, 이 프로퍼티의 값은 nil이 된다.

728x90