🍎 아이폰 iOS ~ Swift

[iOS/Swift] ViewController 화면 전환 방법 3가지

핑크빛연어 2023. 7. 25. 22:30

 

🚨 ViewController 화면 전환 방법

1. ViewController 가 다른 ViewController 호출 (Present)

2. NavigationVIewController 사용하여 화면 전환 (Push)

3. 화면 전환용 객체 Segue 사용

 

 

 

🧤 ViewController 가 다른 ViewController 호출 (present)

다른 ViewController 를 modal 로 띄우는 방식입니다.

 

✅ 관련된 파일 목록

 • ChangePresent.storyboard

 • ChangePresentVC.swift

 • ChangePresent1VC.swift

 

 

ChangePresent.storyboard

storyboard 에 2개의 ViewController 로 구성하였습니다.

 

각각의 ViewController 는 identity inspector 에서 Storyboard ID 값 지정이 필요합니다.

저는 첫번째 ViewController 는 ChangePresentVC, 두번째 ViewController 는 ChangePresent1VC 로 지정하였습니다.

 

 

ChangePresentVC.swift

go 1 화면 버튼 클릭 시 ChangePresent 1 화면으로 이동하도록 구현하기 위해

go 1 화면 버튼에 @IBAction func 를 연결하고 해당 코드를 추가해주었습니다.

guard let nextVC = self.storyboard?.instantiateViewController(identifier: "Storyboard ID") else { return }
self.present(nextVC, animated: true, completion: nil)

 

go 1 화면 버튼의 Action func : goChangePresent1()

import UIKit

class ChangePresentVC: UIViewController {
    
	...
    
    /**
     * goChangePresent1()
       - ChangePresent 화면 -> ChangePresent 1 화면 으로 이동
     * present 를 이용한 화면 전환
     */
    @IBAction func goChangePresent1(_ sender: Any) {
        
        // 화면전환버튼
        guard let nextVC = self.storyboard?.instantiateViewController(identifier: "ChangePresent1VC") else {return}
//        guard let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "ChangePresent1VC") as? ChangeAViewController else {return}

        // 화면 전환 애니메이션 설정
        // nextVC.modalTransitionStyle = .coverVertical
        // 전환된 화면이 보여지는 방법 설정 (fullScreen)
        //  nextVC.modalPresentationStyle = .fullScreen
        
        self.present(nextVC, animated: true, completion: nil)
    
    }
    
}

 

 

ChangePresent1VC.swift

present - 뒤로가기

ChangePresent 1 화면의 back 기본 화면 버튼 클릭 시 다시 ChangePresent 화면 으로 이동하기 위해

back 기본 화면 버튼에 @IBAction func 를 연결하고 해당 코드를 추가해주었습니다.

self.presentingViewController?.dismiss(animated: true)

 

back 기본 화면 버튼의 Action func : backChangePresent()

import UIKit

class ChangePresent1VC: UIViewController {
    
    ...
    
    /**
     * backChangePresent()
       - ChangePresent 1 화면 -> ChangePresent 화면 으로 되돌아가기
     * present 를 이용한 화면 뒤로가기
     */
    @IBAction func backChangePresent(_ sender: Any) {
        
        self.presentingViewController?.dismiss(animated: true)
        
    }
    
}

 

 

결과 화면

 

 

 

🧤 NavigationViewController 사용하여 화면 전환 (push)

NavigationController 를 사용하여 화면 전환을 하기 위해 NavigationController 를 embed in 해줘야 합니다.

 

✅ 관련된 파일 목록

 • ChangePush.storyboard

 • ChangePushVC.swift

 • ChangePush1VC.swift

 

상단 메뉴바의 Editor > Embed In > Navigation Controller 를 클릭합니다.

 

그러면 storyboard 에 Navigation Controller 가 표시됩니다.

 

guard let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "Storyboard ID") else { return }
self.navigationController?.pushViewController(nextVC, animated: true)

 

push - 뒤로가기

NavigationController 는 Stack 에 쌓이는 방식이여서 화면 상단에 back 버튼이 자동으로 생성됩니다.

상단 back 버튼이 아닌 구현한 버튼으로 뒤로가기 실행 시 소스코드를 추가해 줘야 합니다.

 

ChangePush 1 화면의 back 기본 화면 버튼 클릭 시 다시 ChangePush 화면 으로 이동하기 위해

back 기본 화면 버튼에 @IBAction func 를 연결하고 해당 코드를 추가해주었습니다.

self.navigationController?.popToRootViewController(animated: true)

 

 

 

🧤 화면 전환용 객체 Segue 사용

Segue 를 사용하는 방식은 storyboard 상에서 경로가 시각적으로 나타납니다.

화면 전환용 객체 Segue 는 두가지 종류가 있습니다. - Action Segue / Manual Segue (+Unwind Segue)

 

✅ 관련된 파일 목록

 • ChangeSegue.storyboard

 • ChangeSegueVC.swift

 

 

1. Action Segue

✔️ 출발점이 ViewController 가 아닌 것 (ex. Button)

1️⃣ 출발점 ViewController 의 go 1 화면 버튼에서 control 키 누르고 이동할 ViewController 로 Drag&Drop 합니다.

2️⃣ Action Segue > Show 클릭

3️⃣ 그러면 Segue 가 연결된 것을 확인할 수 있습니다.

 

 

2. Manual Segue

✔️ 출발점이 ViewController 인 것 + 소스코드(performSegue)

1️⃣ 출발점 ViewController 에서 control 키 누르고 이동할 ViewController 로 Drag&Drop 합니다.

2️⃣ Manual Segue > Show 클릭

3️⃣ 그러면 Segue 가 연결된 것을 확인할 수 있습니다.

 

4️⃣ Manual Segue 는 소스코드 추가가 필요합니다.

go 2 화면 버튼 클릭 시 ChangeSegue 2 화면으로 이동하도록 구현하기 위해

Segue 화살표를 클릭하여 Attributes Inspector 에서 Segue Identifier 값을 지정해줘야 합니다.

 

go 2 화면 버튼에 @IBAction func 를 연결하고

위에서 지정한 Segue Identifier 를 사용하여 해당 코드를 추가해주었습니다.

self.performSegue(withIdentifier: "Segue Identifier", sender: self)
@IBAction func goChangeSegue2(_ sender: Any) {

    self.performSegue(withIdentifier: "myChangeSegue2", sender: self)

}

 

 

Unwind Segue - 뒤로가기

Segue - 뒤로가기

Segue 를 사용한 화면전환에서 맨 처음 ViewController 로 되돌아갈 때 사용됩니다.

 

1️⃣ 먼저 출발점 소스코드인 ChangeSegueVC.swift 에 임의의 @IBAction func 함수를 만들어줘야 합니다.

storyboard 의 위젯과 따로 연결을 하지 않고 임의의 @IBAction func 을 먼저 만들어둡니다.

주의할 점은 시작점의 ViewController 의 소스코드에 구현해야 한다는 점입니다.

    @IBAction func unwindToVC(_ segue: UIStoryboardSegue) {

    }

 

2️⃣ storyboard 로 돌아와서 두번째 ViewController 에서의 back 기본 화면 버튼을

같은 ViewController 의 Exit 로 Drag&Drop 연결하면

시작점 ViewController 소스코드에 임의로 만든 @IBAction func 목록이 표시되는데, 해당하는 func 을 클릭하여 연결해줍니다.

 

 

ChangeSegueVC.swift

import UIKit

class ChangeSegueVC: UIViewController{
    
    override func viewDidLoad() {
        super.viewDidLoad()
        print("ChangeSegueVC >> viewDidLoad() ")
    }
    
    
    /**
     * goChangeSegue2()
       - ChangeSegue 화면 -> ChangeSegue 2 화면 으로 이동
     * Segue 를 이용한 화면 전환
     */
    @IBAction func goChangeSegue2(_ sender: Any) {
        
        self.performSegue(withIdentifier: "myChangeSegue2", sender: self)
        
    }
    
    
    /**
     * unwindToVCFrom1()
       - ChangeSegue 1 화면 -> ChangeSegue 화면 으로 되돌아가기
     * Segue 의 unwind 로 뒤로가기
     */
    @IBAction func unwindToVCFrom1(_ segue: UIStoryboardSegue) {
        print("ChangeSegueVC >> unwindToVCFrom1() ")
    }
    
    
    /**
     * unwindToVCFrom2()
       - ChangeSegue 2 화면 -> ChangeSegue 화면 으로 되돌아가기
     * Segue 의 unwind 로 뒤로가기
     */
    @IBAction func unwindToVCFrom2(_ segue: UIStoryboardSegue) {
        print("ChangeSegueVC >> unwindToVCFrom2() ")
    }
    
}

 

 

 

💡 Tip

참고 : 버튼에 @IBAction func 연결하기

 

storyboard 화면의 우측 상단의 Adjust Editor Option > Assistant 클릭하면

왼쪽 storyboard 와 연결된 ViewController.swift 소스코드가 오른쪽에 표시됩니다.

 

control 키 누르고 버튼을 ViewController.swift 로 Drag&Drop 합니다.

그러면 Connect 창이 하나 뜨고,

버튼의 객체가 특정 이벤트를 발생했을 경우 호출되는 함수를 구현하기 위해

[Connection : Action / Name : func 이름] 으로 작성해서 Connect 버튼 클릭 시 연결됩니다.

 

 

728x90
반응형