💻 개발/TIL

[TIL] 22.06.03

고도고도 2022. 6. 3. 17:39

iOS 에서 화면 이동을 하는 방법에는 4가지가 있다.

 

  • ViewController 에서 화면 전환
  • ViewController 가 다른 ViewController 를 호출하여 화면 전환
  • NavigationViewController 를 사용하여 화면 전환
  • 화면 전환용 객체 Segue 를 사용하여 화면 전환

 

1. ViewController 에서 화면 전환

ViewController 위의 View 를 다른 View 로 교체하는 방식으로 메모리 누수로 인해 사용을 지양한다. 특정한 경우에만 사용한다. 안드로이드에서는 View 의 Visibility 속성을 이용하여 변경하는 방식을 자주 사용했었는데 iOS 에서는 지양한다고 하니 좀 신기했다. 이 부분에 대해선 좀 더 찾아보고 정리해봐야겠다.

 

2. ViewController 가 다른 ViewController 를 호출하여 화면 전환

하단에서 View 가 올라오는 Modal 방식에 사용하면 된다. 전환된 화면이 어떤 방식으로 보여질 지에 대한 속성을 정의하면 일반적인 화면 전환처럼 보여줄 수도 있다.

 

두 개의 ViewController 를 추가

ViewController 를 인스턴스화하는 과정에서 식별자가 사용되기 때문에 스토리보드에서 ViewController 에 대한 식별자를 정의한다.

 

Storyboard ID를 추가

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 을 구현해줘야 한다.

 

Modal 방식으로 보여줌

 

3. NavigationViewController 를 사용

NavigationViewController를 사용하면 ViewController가 Stack에 쌓인다. 자동적으로 상단 NavigationBar에 BackButton이 추가되기 때문에 2번 방식과 다르게 별도로 Back Button을 구현할 필요가 없다.

 

Navigation Controller를 검색
Ctrl + 드래그로 Root View를 설정

Navigation Controller를 추가하면 2개의 View 가 추가되는데 Root View 를 제거하고 Navigation Controller 에서 Ctrl + 드래그 를 통해 처음에 보여질 View 와 연결한다. 즉, 기본적으로 생성된 Root View 를 제거하고 새롭게 Root View 를 설정하는 것이다.

 

Root View 설정을 완료했으면 화면 이동으로 보여줄 나머지 View 를 추가한다. 역시 식별자를 추가해주는 것을 잊지 말자!

 

Storyboard ID를 추가

그 이유는 인스턴스화하는 과정에서 식별자가 사용되기 때문이다.

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 를 사용해서 화면 전환을 한다.

 

상단에 NavigationBar가 존재

 

4. Segue를 통한 화면 전환

'💻 개발 > TIL' 카테고리의 다른 글

[TIL] 22.08.25  (0) 2022.08.25
[TIL] 22.08.24  (0) 2022.08.24
[TIL] 22.06.03  (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