Step by Step

ViewController 간 Data 교환 본문

ios 앱 개발

ViewController 간 Data 교환

짤진이 2025. 3. 26. 15:55
반응형
뷰컨트롤러에 직접 값 전달 방식
  • 첫번째 뷰컨트롤러에서 두번째 뷰컨트롤러로 전달할 값을 준비
  • 첫번째 뷰컨트롤러에서 전달하는 값을 대입할 수 있도록 두번째 뷰컨트롤러에 변수를 정의
  • 첫번째 뷰컨트롤러에서 두번째 뷰컨트롤러의 인스턴스를 생성
  • 첫번째 뷰컨트롤러에서 참조된 두번째 뷰컨트롤러의 대응 변수에 전달할 값을 대입
  • 첫번째 뷰컨트롤러에서 두번째 뷰컨트롤러로 화면을 전환
뷰컨트롤러간에 데이터 전달 데모
  • 입력을 담당하는 컨트롤들을 사용.
  • UITextField, UISwitch, UIStepper, UISlider, UISegment, UIButton컨트롤을 사용.

nil 값이 아니기 때문에 ! 연산자를 사용

추후에 변수들에 nil을 대입하여 메모리 삭제..?프로그램을 끝내는...?용도로 사용하기 위해 !를 사용한다.

 

뷰컨트롤러간에 데이터 전달 데모
  • 아웃렛과 액션의 연결이 정상적인지를 판단할 때 Connection Inspector창에서 확인할 수 있다.

 

//
//  ViewController.swift
//  DemoDelivery
//
//  Created by 정찬진 on 3/26/25.
//

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var paramTextField: UITextField!
    @IBOutlet var paramSwitch: UISwitch!
    @IBOutlet var paramStepper: UIStepper!
    @IBOutlet var paramSegment: UISegmentedControl!
    @IBOutlet var paramSlider: UISlider!
    @IBOutlet var lblSwitch: UILabel!
    @IBOutlet var lblResult: UILabel!
    @IBOutlet var lblStepper: UILabel!
    
    
    @IBAction func onSwitch(_ sender: Any) {
        //다운캐스팅(?)
        let updateSwitch = sender as! UISwitch
        
        if (updateSwitch.isOn == true) {
            lblSwitch.text = "불이 켜진 상태"
        } else {
            lblSwitch.text = "불이 꺼진 상태"
        }
    }
    
    @IBAction func onStepper(_ sender: Any) {
        let intervalStepper = sender as! UIStepper
        lblStepper.text = "스테퍼 : \(Int(intervalStepper.value))"
    }
    
    @IBAction func onSlider(_ sender: Any) {
        let sliderValue = sender as! UISlider
        lblResult.text = "슬라이더 : \(Int(sliderValue.value))"
    }
    
    @IBAction func onSegment(_ sender: Any) {
        let segmentControl = sender as! UISegmentedControl
        
        switch segmentControl.selectedSegmentIndex{
        case 0:
            lblResult.text = "남성"
        case 1:
            lblResult.text = "여성"
        case 2:
            lblResult.text = "중성"
        default:
            break
        }
    }
    
    @IBAction func onSubmit(_sender:Any){
        if let uvc = self.storyboard?.instantiateViewController(withIdentifier: "ResultViewController") as? ResultViewController{
            //미리 데이터 넘기기
            
            uvc.paramTextField = self.paramTextField.text!
            uvc.paramSwitch = self.paramSwitch.isOn
            uvc.paramStepper = self.paramStepper.value
            uvc.paramSlider = self.paramSlider.value
            uvc.paramSegment = self.paramSegment.selectedSegmentIndex
            //실제 화면 이동
            self.present(uvc, animated:true)
        }
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
}

 

 

import UIKit

class ResultViewController: UIViewController {
    
    //데이터 받기
    var paramTextField:String = ""
    var paramSwitch:Bool = false
    var paramStepper:Double = 0
    var paramSlider:Float = 0
    var paramSegment:Int = 0
    
    @IBOutlet var lblResult: UILabel!
    
    @IBAction func dismiss(_ sender: Any) {
        self.presentingViewController?.dismiss(animated : true, completion:nil)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        var result:String = ""
        result = paramTextField + "\n"
        result += (paramSwitch == true ? "선택됨" : "선택안함") + "\n"
        result += "스테퍼 : \(paramStepper)" + "\n"
        result += "슬라이더 \(self.paramSlider)" + "\n"
        switch paramSegment {
        case 0:
            result += "남자"
        case 1:
            result += "여자"
        case 2:
            result += "중성"
        default:
            break
        }
        self.lblResult.text = result
    }
}
반응형

'ios 앱 개발' 카테고리의 다른 글

Objective-C 기본 개념  (3) 2025.04.21
Delegate 패턴  (0) 2025.03.26
Swift(Segueway 화면전환)  (2) 2025.03.26
Swift 기본문법(3)  (1) 2025.03.25
Swift 기본문법(2) 옵셔널 바인딩, 초기화  (0) 2025.03.25