iOS/Swift - 화면전환 방법 Navigation Controller Push , Pop

Kim-leo·2022년 12월 13일
0


Navigation Controller를 사용하여 한 화면에서 다른 화면으로 이동하는 방법을 찬찬히 알아봅시다.

처음 화면에 Navigation Controller를 생성하고, 두번째 화면에 대한 ViewController와 해당swift파일을 만듭니다.

Main.storyboard내의 두번째 화면에 대한 Class와 Storyboard ID를 꼭 잊지말고 작성해주세요!

각 화면전환을 위한 버튼도 만들어주었습니다.

처음화면의 코드파일로 가서, 버튼 액션함수를 추가하고 코드를 다음과 같이 적습니다.

// FirstViewController.swift

import UIKit

class FirstViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
    }


    @IBAction func goToNextVC(_ sender: UIButton) {
        guard let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else { return }
        self.navigationController?.pushViewController(nextVC, animated: true)
        
    }
    
}

한 줄씩 무슨 뜻인지, 왜 썼는지 보겠습니다.


guard let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else { return }

guard let 문법을 사용했는데요.
이는 일종의 예외처리 방법 중 하나입니다.
"SecondViewController"라는 스토리보드 ID가 있는 SecondViewController가 있다면 그 뷰컨을 nextVC라고 정하고, 위의 것이 없다면 else { return } 해버리는 것이죠.

self.navigationController?.pushViewController(nextVC, animated: true)

여기서 self는 클래스 자신 즉, FirstViewController를 가리킵니다.
위의 코드 한 줄의 의미는 FirstViewController 안에 있는 Navigation Controller가 "pushViewController(nextVC, animated: true)"라는 것을 실행한다라는 것입니다.


다음은 SecondViewController의 "처음으로 이동" 버튼액션함수를 만들고 함수 내에 다음과 같이 작성합니다.

// SecondViewController.swift
import UIKit

class SecondViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }
    

    @IBAction func backToFirstVC(_ sender: UIButton) {
        self.navigationController?.popViewController(animated: true)
    }
}

액션함수 내에 딱 한 줄 밖에 없습니다. 코드의미를 바로 설명드리자면,
SecondViewController 내에 있는 navigationController가 "popViewController(animated: true)"라는 것을 실행한다는 것입니다.


아까 전에 FirstViewController 에서는 Push 였고,
SecondViewController 에서는 Pop이라는 키워드가 나왔는데요. 이 두 단어는 프로그램 내에서 어떻게 동작하는지 궁금하군요.
바로 알아봅시다.

NavigationController에서 새로운 ViewController를 push 할 때에는 FirstVC 위에 새로운 SecondVC를 올려 쌓습니다. 다음 그림과 같이요.
그래서 시뮬레이터 또는 기기에서 확인해보시면 화면 전환 시, 옆으로 이동하는 모습이 보일텐데요. 그런 이유입니다.

반대로 쌓여진 SecondVC를 Pop하겠다고 하는 것은 쌓여진 SecondVC를 옆으로 치우겠다는 의미입니다.
Navigation Controller를 사용하여 화면을 전환하는 과정은 한 화면위에 어떤 화면을 쌓아서 보여줄 것인가에 대한 과정의 반복입니다.


감사합니다.

전체 코드: "https://github.com/Kim-leo/VELog-"

profile
iOS Developer

0개의 댓글