iOS 에서 화면 이동을 하는 방법에는 4가지가 있다.
- ViewController 에서 화면 전환
- ViewController 가 다른 ViewController 를 호출하여 화면 전환
- NavigationViewController 를 사용하여 화면 전환
- 화면 전환용 객체 Segue 를 사용하여 화면 전환
1. ViewController 에서 화면 전환
ViewController 위의 View 를 다른 View 로 교체하는 방식으로 메모리 누수로 인해 사용을 지양한다. 특정한 경우에만 사용한다. 안드로이드에서는 View 의 Visibility 속성을 이용하여 변경하는 방식을 자주 사용했었는데 iOS 에서는 지양한다고 하니 좀 신기했다. 이 부분에 대해선 좀 더 찾아보고 정리해봐야겠다.
2. ViewController 가 다른 ViewController 를 호출하여 화면 전환
하단에서 View 가 올라오는 Modal 방식에 사용하면 된다. 전환된 화면이 어떤 방식으로 보여질 지에 대한 속성을 정의하면 일반적인 화면 전환처럼 보여줄 수도 있다.
ViewController 를 인스턴스화하는 과정에서 식별자가 사용되기 때문에 스토리보드에서 ViewController 에 대한 식별자를 정의한다.
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func tapMoveSecondViewController(_ sender: UIButton) {
guard let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else { return }
// 화면 전환 애니메이션 설정
secondViewController.modalTransitionStyle = .coverVertical
// 전환된 화면이 보여지는 방법 설정
secondViewController.modalPresentationStyle = .fullScreen
self.present(secondViewController, animated: true, completion: nil)
}
}
이 방법으로 화면 전환을 구현하면 상단에 Back Button 이 구현되어 있지 않다. 따라서 개발자가 별도로 Back Button 을 구현해줘야 한다.
3. NavigationViewController 를 사용
NavigationViewController를 사용하면 ViewController가 Stack에 쌓인다. 자동적으로 상단 NavigationBar에 BackButton이 추가되기 때문에 2번 방식과 다르게 별도로 Back Button을 구현할 필요가 없다.
Navigation Controller를 추가하면 2개의 View 가 추가되는데 Root View 를 제거하고 Navigation Controller 에서 Ctrl + 드래그 를 통해 처음에 보여질 View 와 연결한다. 즉, 기본적으로 생성된 Root View 를 제거하고 새롭게 Root View 를 설정하는 것이다.
Root View 설정을 완료했으면 화면 이동으로 보여줄 나머지 View 를 추가한다. 역시 식별자를 추가해주는 것을 잊지 말자!
그 이유는 인스턴스화하는 과정에서 식별자가 사용되기 때문이다.
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func tapMoveSecondViewController(_ sender: UIButton) {
guard let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else { return }
self.navigationController?.pushViewController(secondViewController, animated: true)
}
}
import UIKit
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func tapMoveThirdViewController(_ sender: UIButton) {
guard let thirdViewController = self.storyboard?.instantiateViewController(withIdentifier: "ThirdViewController") as? ThirdViewController else { return }
self.navigationController?.pushViewController(thirdViewController, animated: true)
}
}
스토리보드에서 추가한 식별자를 가지고 ViewController 를 인스턴스화하고 pushViewController 를 사용해서 화면 전환을 한다.
4. Segue를 통한 화면 전환
'💻 개발 > TIL' 카테고리의 다른 글
[TIL] 22.06.03 - iOS 화면 전환 (0) | 2022.06.03 |
---|---|
[TIL] 22.05.27 (0) | 2022.05.27 |
[TIL] 22.05.26 (0) | 2022.05.26 |
[TIL] 22.04.20 (0) | 2022.04.20 |
[TIL] 22.04.18 (0) | 2022.04.18 |
[TIL] 22.04.17 (0) | 2022.04.17 |