안녕하세요 안녕주입니다 :)
오늘은 push 랑 present의 차이를 중심으로 화면 전환 방식에 대한 기록을 남기겠습니다!
UIViewController
특징
- 사용자의 이목을 끌기 위한 화면 전환 기법
- 화면을 다른 화면 위로 띄워 표현하는 방식
- 흐름을 이어지는 컨텐츠를 담기 보다는 흐름을 끓고 눈에 보여줘야하는 콘텐츠를 담는데 사용
- UIViewController 클래스를 상속받은 클래스에서의 화면전화 방법
- X 버튼이 주로 있음
(1) present : 뷰 이동
- 뷰 전환 방식 : 세로방향 (아래에서 위)
- modalPresentationStyle로 화면 전환이 되는 스타일을 정할 수 있음
- present(_:animated:completion:)
- Presents a view controller modally.
- viewControllerToPresent : 전환 될 뷰
- animated : 애니메이션 여부
- completion : 이동하고 나서 실행될 문장 블럭
func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil)
- 사용법
@IBAction func gotoNextVC(_ sender: Any) {
guard let welcomeVC = self.storyboard?.instantiateViewController(withIdentifier: "WelcomeVC") as? WelcomeVC else {return}
welcomeVC.modalPresentationStyle = .fullScreen
self.present(welcomeVC, animated: true, completion: nil)
}
(2) dismiss : 돌아가기
- present된 뷰를 메모리에서 삭제하고 걷어낸다
- dismiss(animated:completion:)
- animated : 애니메이션 여부
- completion :
- 이동하고 나서 실행될 문장 블럭
func dismiss(animated flag: Bool, completion: (() -> Void)? = nil)
- 사용법
@IBAction func gotoBack(_sender: Any) {
self.dismiss(animated: true, completion: nil)
}
UINavigationController
특징
- 계층적 구조의 뷰 워크플로우를 구현하기 위해 사용
- ViewController 사이 계층 구조를 탐색할 수 있게 해주는 객체
- Present 방식과는 다르게 자식 뷰는 Stack으로 관리
- UIViewController를 담을 수 있는 Container ViewController
- Navigation Stack 원리
- < 버튼이 주로 있음
(1) push : 뷰 이동
- 뷰 전환 방식 : 가로방향(왼쪽에서 오른쪽)
- 스택에 뷰를 쌓는 형태로 화면을 업데이트
- pushViewController(_:animated:)
- viewController : 전환될 뷰
- animated : 애니메이션 효과
func pushViewController(_ viewController: UIViewController, animated: Bool)
- 사용법
@IBAction func gotoNextVC(_ sender: Any)
guard let signUpVC = self.storyboard?.instantiateViewController(withIdentifier: "SignUpNickNameVC") else {return}
self.navigationController?.pushViewController(signUpVC, animated: true)
}
(2) pop : 돌아가기
- 스택에 쌓인 뷰 1개를 pop하고 돌아가기
- popViewController(animated:)
- animated : 애니메이션 효과
func popViewController(animated: Bool) -> UIViewController?
- 사용법
@IBAction func gotoBack(_ sender: Any)
self.navigationController?.popViewController(animated: true)
}
(3) popTo : 원하는 스택으로 돌아가기
- 네비게이션 스택의 원하는 ViewController로 돌아가기 (= 특정 viewController 가 navigation stack 의 맨 위에 올때까지 Pop)
- popToViewController(_:animated:)
- viewController : pop해서 이동할 뷰
- animated : 애니메이션 효과
func popToViewController(_ viewController: UIViewController, animated: Bool) -> [UIViewController]?
- 사용법
@IBAction func gotoBack(_ sender: Any)
guard let signUpVC = self.storyboard?.instantiateViewController(withIdentifier: "SignUpNickNameVC") else {return}
welcomeVC.modalPresentationStyle = .fullScreen
self.present(welcomeVC, animated: true, completion: {
//navigation 스택에서 돌아가고싶은 뷰까지 pop하면서 이동
if let rootVC = ViewControoller as? LoginVC {
self.navigationController?.popToViewController(rootVC ,animated: true)
}
})
}
(3) popToRoot : 맨 처음으로 돌아가기
- 네비게이션 스택의 RootView로 돌아가기
- popToViewController(_:animated:)
- animated : 애니메이션 효과
func popToRootViewController(animated: Bool) -> [UIViewController]?
- 사용법
@IBAction func gotoNextVC(_ sender: Any)
guard let signUpVC = self.storyboard?.instantiateViewController(withIdentifier: "SignUpNickNameVC") else {return}
welcomeVC.modalPresentationStyle = .fullScreen
self.present(welcomeVC, animated: true, completion: {
self.navigationController?.popToRootViewController(animated: true)
})
}
[iOS] 화면전환의 종류 (push vs present)
iOS) 여러개의 view controller pop 하기
'iOS > Swift' 카테고리의 다른 글
[iOS] RootViewController 변경하는법과 이유 (0) | 2022.04.16 |
---|---|
[iOS] Any, AnyObject, nil (0) | 2022.03.07 |
[iOS] ARC (0) | 2022.02.20 |
[iOS] SOLID 원칙 in Swift (0) | 2022.02.19 |
[iOS] 의존성 주입 DI (2) | 2022.02.19 |
댓글