📱 App Development Study/iOS🍎

[Udemy iOS & Swift Bootcamp] 두번째 페이지 만들어서 값 넘기기

ibelieveinme 2023. 4. 2. 23:08
728x90

여러 개의 View 를 만들고 값을 넘겨보자

 

1. segue 연결법

1) UI로 연결하기

왼쪽 View에서 Ctrl키를 누르고 오른쪽 View에 놓으면 action을 설정하는 팝업이 뜬다.

 

Show는 화면이 왼쪽으로 밀리며 나타나고 왼쪽 상단에 뒤로가기 버튼이 생긴다.

Present Modally는 아래에서 위로 새로운 화면이 나타난다.

 

난 Present Modally 을 클릭했다.

 

2) Segue에  Identifier 정의하기

연결부분이 많을 수 있으니, 연결부분에 Identifier를 주자.

 

3) 연결 시 필요한 함수 구현하기

@IBAction func onClickButton(_ sender: UIButton) {
    self.performSegue(withIdentifier: "goToResult", sender: self)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "goToResult" {
        var destinationVC = segue.destination as! ResultViewController
        //ResultViewController에서 수행할 내용 적기
    }
}

첫번째 화면 ViewController에 performSegue함수 구문과 prepare함수를 만들어야 한다.

 

self.performSegue(withIdentifier: "Identifier", sender: self) 는 현재 ViewController가 goToResult Segue를 수행하라는 뜻이고, 수행하며 값을 전달하고 싶다면 prepare 함수를 override 해서 구현해주면 된다.

prepare 함수 내에서는 identifier를 분기로 목적지 ViewController에서 할 일을 적어주면 된다.

 

2. 값 넘기는 법 2가지

BMI 값을 결과창에 넘겨서 결과창에서 BMI값이 보여지도록 해보자.

 

1) 함수내의 변수를 performSegue함수의 sender로 보내기

// 첫번째 ViewController의 코드

@IBAction func onClickCalculateButton(_ sender: UIButton) {
    let bmiValue = weightSlider.value / pow(heightSlider.value, 2)
    self.performSegue(withIdentifier: "goToResult", sender: String(format: "%.2f", bmiValue))
}
    
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "goToResult" {
        var destinationVC = segue.destination as! ResultViewController
        let bmiValue = sender as! String
        destinationVC.bmiValue = bmiValue
    }
}

 

//두번째 ViewController의 코드

 

import UIKit

class ResultViewController: UIViewController {

    var bmiValue: String?
    @IBOutlet weak var bmiLabel: UILabel!   
   
    
    override func viewDidLoad() {
        super.viewDidLoad()
        bmiLabel.text = bmiValue
    }
}

 

2) 전역변수 만들어서 그 값을 넘기기

// 첫번째 ViewController의 코드

    var bmiValue = "0.0"
    
    @IBAction func onClickCalculateButton(_ sender: UIButton) {
        let bmi = weightSlider.value / pow(heightSlider.value, 2)
        bmiValue = String(format: "%.2f", bmi)
        self.performSegue(withIdentifier: "goToResult", sender: self)
    }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "goToResult" {
            var destinationVC = segue.destination as! ResultViewController
            destinationVC.bmiValue = bmiValue
        }
    }

 

//두번째 ViewController의 코드

import UIKit

class ResultViewController: UIViewController {

    var bmiValue: String?
    @IBOutlet weak var bmiLabel: UILabel!   
   
    
    override func viewDidLoad() {
        super.viewDidLoad()
        bmiLabel.text = bmiValue
    }
}

 

3. 두번째 페이지에서 첫번째 페이지로 다시 돌아가기.

import UIKit

class ResultViewController: UIViewController {

    var bmiValue: String?
    
    @IBOutlet weak var bmiLabel: UILabel!
    @IBOutlet weak var adviceLabel: UILabel!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        bmiLabel.text = bmiValue
    }
    
    @IBAction func recalculatePressed(_ sender: UIButton) {
        self.dismiss(animated: true, completion: nil)
    }
  
}

self.dismiss 코드를 한줄 적어주면 되돌아간다.

 

728x90