Post

UIKit - 화면 전환 및 데이터 전달(간접 세그웨이)

UIKit - 화면 전환 및 데이터 전달(간접 세그웨이)

화면 전환 및 데이터 전달(간접 세그웨이)

스토리보드에서 전환할 ViewController를 세그웨이로 연결해줘야함.

Segue(세그웨이)는 화면 전환을 처리하는 객체임.

1.ViewController를 클린한 뒤 키보드에 Control 키를 누른 상태에서 전환할 ViewController로 드래그 후 PresentModally를 선택.

image

2.Segue 확인

image

3.SegueIdentifier 값을 설정

image

위 값은 Segue를 통해 화면 전환을 처리할 때 필요함.

화면 코드 구현

ViewController.swift

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import UIKit

class ViewController: UIViewController {

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

    @IBAction func nextBtnTapped(_ sender: UIButton) {
        // 세그웨이 활성화 메서드
        performSegue(withIdentifier: "nextSegue", sender: self)
    }
    
    // 데이터 전달 처리를 위해 prepare 메서드를 오버라이딩 해줌.
    // performSegue가 호출된 직후, 실제 화면 전환 전에 prepare 메서드가 자동 호출되어 데이터를 주입할 수 있음.
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        
        // 세그웨이 ID 값 확인
        if segue.identifier == "nextSegue"{
            
            // destination: 전환되는 화면
            let nextVC = segue.destination as! NextViewController
            
            // 데이터 전달
            nextVC.text = "Hello World!"
        }
    }
}

NextViewController.swift

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import UIKit

class NextViewController: UIViewController {
    
    @IBOutlet weak var exLabel: UILabel!
    
    // 데이터를 전달받기 위한 변수
    var text: String?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        exLabel.text = text
    }
    
    @IBAction func backBtnTapped(_ sender: UIButton) {
        // 이전 화면으로 돌아가기
        dismiss(animated: true)
    }
}

결과

image

위 예시처럼 버튼같은 UI에 직접 세그웨이를 연결하는 것이 아니라 코드(performSegue)로 세그웨이를 실행하는 방식을 간접 세그웨이라고 함.

This post is licensed under CC BY 4.0 by the author.