seong_hye, the developer

UIKit) 화면 전환 방식 본문

IOS/UIKit

UIKit) 화면 전환 방식

seong_hye 2022. 7. 19.

📘 Swift - UIKit) 화면 전환 방식

Swift에는 화면 전환(화면 이동)을 구현하는 여러 방식이 존재한다

이에 대해 하나하나 알아가보자


🔹화면 전환 3가지 방식

방식 설명 사용 환경
Push Navigation Stack에 밀어 넣는 방식 UINavigationController
Present (Modal) 현재 화면 위에 새 화면을 덮는 방식 모든 UIViewController 가능
Segue 스토리드에서 화살표로 연결 스토리보드 기반

🔹1. PushViewController 방식

현재 UINavigationController 가 관리하는 화면 스택에

새로운 ViewController를 추가(push) 하여 화면을 전환하는 방식

func pushViewController(
    _ viewController: UIViewController,
    animated: Bool
)

📌 특징

- 뒤로 가기 버튼이 자동 생성됨
- 이전 화면은 유지되고, 사용자는 뒤로 돌아갈 수 있음  (스택을 쌓는 형식)
- 좌 -> 우 슬라이드 제스처가 기본 지원됨

 

기본 문법

let nextVC = DetailViewController()
navigationController?.pushViewController(nextVC, animated: true)

 

필수 조건

- navigationController가 있어야 함

UINavigationCOntroller가 UINavigationController 안에 포함되어 있어야 pushViewController 사용 가능

 

- 그렇지 않으면 nil

호출해도 아무일도 일어나지 않게 됨

 

 화면이 쌓이는 구조 (스택 구조)

[MainViewController] -> push -> [DetailViewController] -> push -> ...

 

이전 화면은 메모리 상에 유지됨

popViewController 호출하면 뒤로 가기

navigationController?.popViewController(animated: true)

🔹2. Modal 방식 - Present / Dismiss

현재 화면 위에 새로운 뷰 컨트롤러를 모달 방식으로 띄움

전환 방식은 덮는 구조로 스택 구조가 없어도 사용가능함

func present (
    _ viewControllerToPresent: UIViewController,
    animated flag: Bool,
    completion: (() -> Void)? = nil
)

📌 특징

- 새로운 화면을 전체 또는 일부 덮음
- 모달 스타일 지정 가능 (풀스크린, 페이지 시트 등)
- 이전 화면으로 돌아갈 수 있지만 Back 버튼 없음 -> 직접 dismiss 해야 함

 

 기본 문법

let nextVC = DetailViewController()
nextVC.modalPresentationStyle = .pageSheet // 스타일 지정 가능
present(nextVC, animated: true, completion: nil)

 

modalPresentationStyle 종류

스타일 설명
.fullScreen 전체 화면 덮기 (기본값)
.pageSheet 하단 시트 스타일 (iPad에선 팝업)
.formSheet 가운데 작게 뜨는 창(iPad 전용)
.overFullScreen 배경을 비치게 덮음(투명 배경 가능)

 

이전 화면으로 - dismiss

presnet한 화면에서만 dismiss() 호출 가능

present 된 화면에서 데이터 전달 시 클로저나 delegate 사용

dismiss(animated: true, completion: nil)

🔍 push vs present 차이

항목 pushViewController() present()
구조 Navigation Stack에 쌓음 현재 화면 위에 덮기
뒤로 가기 버튼 자동 생성됨 직접 닫아야 함
상위 구조 필요 NavigaionController 필요 불필요
적절히 사용 예 리스트 -> 상세, 단계적 화면 흐름 팝업창, 설정 화면, 로그인

 

✅ 실행 화면

1. push / 2. present

 


🔹3. Segue (스토리보드 전용)

스토리보드에서 ViewController 간 화살표로 연결한 후, identifier 설정 후 코드에서 호출하는 방식

또는 자동 연결( show, present modally 등 선택 가능)

performSegue(withIdentifier: "goToDetail", sender: self)

📌 특징

- 스토리보드에서 시작적으로 연결

- 코드 없이도 전환 가능

- 단점 : 복잡한 전환 로직은 관리가 어려움

 

✅ Segue 설정 방법

➡️ 스토리보드에서 연결

1. 컨트롤을 누른 채로 -> ViewController -> 다른 ViewController로 드래그

2, 전환 방식 선택

3. Storyboard Segue의 identifier 설정 ( 속성창 )

 

✅ Segue 종류 (전환방식)

종류 설명
Show NavigationController 있을 때 -> Push 전환
Present Modally 모달 방식 전환 (Present)
Custom 사용자 지정 애니메이션 적용 가능
Popover iPad 스타일의 팝업 표시 (앵커 필요)

 

'IOS > UIKit' 카테고리의 다른 글

UIKit) View Life Cycle  (0) 2022.10.26
Swift)SnapKit에 대해 알아보기  (0) 2022.10.24
UIKit) AppDelegate & SceneDelegate 알아보기  (0) 2022.10.19
Swift) 문법 정리 - 생성자  (0) 2022.08.02
Swift) 코드 스니펫(Code Snippet)  (0) 2022.07.26
Comments