꾸준히 안타치기

뷰컨트롤러에 직접 값 전달하기 본문

iOS/기본편 | 실전편 -꼼꼼한재은씨

뷰컨트롤러에 직접 값 전달하기

글자줍기 2022. 1. 11. 20:16
반응형

진행순서

1. 뷰컨1에서 ResultViewController로 전달할 값을 준비한다.

2. ResultViewController에 전달받아서 넣을 변수를 쓴다. 이때 받는 갯수와 타입이 일치해야한다.

3. 뷰컨1에서 ResultViewController의 인스턴스를 직접생성하거나, 이미생성되어 있는 인스턴스의 참조를 읽어온다.

4. 뷰컨1의 버튼에 (이안에 인스턴스작성)  전달값을 담아서 보낸다.

5. ResultViewController에서 값을 받아서 화면에 표기한다.

 

ViewController1. 

1.이메일 필드, 스위치상태, 스텝퍼 내용 설정후  전달할 값 준비

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet var email: UITextField! // 이메일값 텍스트 필드
    @IBOutlet var isUpdate: UISwitch! // 스위치
    @IBOutlet var interval: UIStepper! // 스텝퍼
    
    @IBOutlet var isUpdateText: UILabel! // 자동갱신텍스트 on/off설정
    @IBOutlet var intervalText: UILabel! // 갱신주기텍스트 ~분마다

IBOutlet연결

IBAction 각 타입은 UISwitch, UIStepper(인자 값을 받아야함)

 //switch를 눌렀을때 버튼이 On이면, Off이면
    @IBAction func onSwitch(_ sender: UISwitch) {
       
        if(sender.isOn == true){
            self.isUpdateText.text = "갱신함"
        }else{
            self.isUpdateText.text = "갱신하지 않음"
        }
    }
    // steper를 클릭했을때 값을 받아와 intervalText에 담는다.
    @IBAction func onStepper(_ sender: UIStepper) {
        // 정수로 변환int
        let value = Int(sender.value)
        self.intervalText.text = "\(value)분 마다"
    }

 

ResultViewController

2. 전달받은 값을 대입할 변수 정의

새로운 뷰컨을 만들고 스토리보드ID를 "RVC"로 작성 

 뷰컨1에서 전달받을 화면을 만든다.

import UIKit

class ResultViewController: UIViewController {
    
    @IBOutlet var resultEmail: UILabel!
    @IBOutlet var resultUpdate: UILabel!
    @IBOutlet var resultInterval: UILabel!
    
    // 이전화면에서 전달받을 값을 받기위해 변수를 선언한다.
    //이메일 값을 받을 변수
    var paramEmail: String = ""
    // 업데이트값을 받을 변수
    var paramUpdate: Bool = false
    //  인터발값을 받을 변수
    var paramInterval: Double = 0

 

ViewController1. 

3. 값을 전달받을 뷰컨트롤러 즉, ResultViewController의 인스턴스를 뷰컨1에 생성한다.

뷰컨1에서 버튼을 눌렀을때 값을 전달한다. 인스턴스도 뷰컨1의 버튼안에 생성해준다.

아까 작성했던 전달받을 뷰컨트롤러 명 "RVC"를 작성하고, 보낼 파라미터내용을 작성한다.

4. 뷰컨1에서 ResultViewController로 화면을 이동한다.

self.present(rvc, animated: true)

    
    // 전달할 화면의 인스턴스를 생성한다.(결과페이지) // ResultViewController로 캐스팅한다.
    @IBAction func onSubmit(_ sender: Any) {
        // 전달하는 뷰컨트롤러의 인스턴스생성
        guard let rvc = self.storyboard?.instantiateViewController(withIdentifier: "RVC") as?
                ResultViewController else{
                    return
                }
        // 값을 전달하는 과정을 여기에 작성한다.
        rvc.paramEmail = self.email.text! // 이메일값
        rvc.paramUpdate = self.isUpdate.isOn // 자동갱신여부
        rvc.paramInterval = self.interval.value// 갱신주기
        
        //화면이동
        self.present(rvc,animated: true)
}

5. 값을 전달받은 ResultViewController에 넘겨받은 값을 화면에 표시해준다.

전달받은 값은 화면이 메모리에 로드되고 난 직후 표시된다.

viewDidLoad()메소드를 호출하고 그안에 받은내용을 표시해준다.

 override func viewDidLoad() {
        // 값 받는부분
        self.resultEmail.text = paramEmail
        // true이면 자동갱신 , 아니면 자동갱신안함
        self.resultUpdate.text = (self.paramUpdate == true ? "자동갱신" : "자동갱신안함")
        self.resultInterval.text = "\(Int(paramInterval))분 마다 갱신"
    }
    // 뒤로가기 버튼을 누르면, 창닫힘
    @IBAction func onBack(_ sender: Any) {
        self.presentingViewController?.dismiss(animated: true)
    }

 

전체코드

ViewController.swift

//  ViewController.swift
//  SubmitValue

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet var email: UITextField! // 이메일값 텍스트 필드
    @IBOutlet var isUpdate: UISwitch! // 스위치
    @IBOutlet var interval: UIStepper! // 스텝퍼
    
    @IBOutlet var isUpdateText: UILabel! // 자동갱신텍스트 on/off설정
    @IBOutlet var intervalText: UILabel! // 갱신주기텍스트 ~분마다
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }
    
    
    //switch를 눌렀을때 버튼이 On이면, Off이면
    @IBAction func onSwitch(_ sender: UISwitch) {
       
        if(sender.isOn == true){
            self.isUpdateText.text = "갱신함"
        }else{
            self.isUpdateText.text = "갱신하지 않음"
        }
    }
    // steper를 클릭했을때 값을 받아와 intervalText에 담는다.
    @IBAction func onStepper(_ sender: UIStepper) {
        // 정수로 변환int
        let value = Int(sender.value)
        self.intervalText.text = "\(value)분 마다"
    }
    
    
    // 전달할 화면의 인스턴스를 생성한다.(결과페이지) // ResultViewController로 캐스팅한다.
    @IBAction func onSubmit(_ sender: Any) {
        // 인스턴스생성
        guard let rvc = self.storyboard?.instantiateViewController(withIdentifier: "RVC") as?
                ResultViewController else{
                    return
                }
        // 값을 전달하는 과정을 여기에 작성한다.
        rvc.paramEmail = self.email.text! // 이메일값
        rvc.paramUpdate = self.isUpdate.isOn // 자동갱신여부
        rvc.paramInterval = self.interval.value// 갱신주기
        
        //화면이동
        self.present(rvc,animated: true)
}
    
}

ResultVIewController.swift

//
//  ResultViewController.swift
//  SubmitValue

import UIKit

class ResultViewController: UIViewController {
    
    @IBOutlet var resultInterval: UILabel!
    @IBOutlet var resultUpdate: UILabel!
    @IBOutlet var resultEmail: UILabel!
    
    // 이전화면에서 전달받을 값을 받기위해 변수를 선언한다.
    //이메일 값을 받을 변수
    var paramEmail: String = ""
    // 업데이트값을 받을 변수
    var paramUpdate: Bool = false
    //  인터발값을 받을 변수
    var paramInterval: Double = 0
    
    override func viewDidLoad() {
        // 값 받는부분
        self.resultEmail.text = paramEmail
        // true이면 자동갱신 , 아니면 자동갱신안함
        self.resultUpdate.text = (self.paramUpdate == true ? "자동갱신" : "자동갱신안함")
        self.resultInterval.text = "\(Int(paramInterval))분 마다 갱신"
    }
    // 뒤로가기 버튼을 누르면, 창닫힘
    @IBAction func onBack(_ sender: Any) {
        self.presentingViewController?.dismiss(animated: true)
    }
}
반응형
Comments