본문 바로가기
iOS/Swift

[iOS] 화면 전환 방식 push vs present

by 안녕주 2022. 4. 15.

안녕하세요 안녕주입니다 :)

오늘은 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

댓글