[UMC-iOS] delegate 패턴으로 화면 간 데이터 전달하기
delegate 패턴 사용하여 화면 간 데이터 전달하기 😀
view controller 2개 만들어 주고,
첫 번째 화면에 label과 <다음 화면으로> 버튼 만들어 줌.
두 번째 화면에 textField와 <이전 화면으로> 버튼 만들어 줌.
첫 번째 화면에서 <다음 화면으로> 버튼을 누르면 화면이 전환되고, 두 번째 화면에서 textField에 텍스트를 입력한 뒤, <이전 화면으로> 버튼을 누를 시, 첫 번째 화면의 label이 입력된 값으로 바뀌게 만들기.
(화면 간 데이터 전달)
- 화면 전환 개념
- protocol
- delegate
첫 번째 뷰컨트롤러 - viewController 클래스와 연결 두 번째 뷰컨트롤러 - SecondViewController 클래스와 연결
//ViewController.swift
import UIKit
protocol ChangeLabelDelegate {
func doChange()
}
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
//일을 위임할 delegate 변수 - 이 delegate가 ChangeLabelDelegate를 시킬 수 있음
var delegate : ChangeLabelDelegate?
//다음 화면으로 버튼을 누르면
@IBAction func ButtonNextVC(_ sender: UIButton) {
//nextVC 인스턴스화 후 SecondViewController으로 다운캐스팅해줌
guard let nextVC = storyboard?.instantiateViewController(withIdentifier: "SecondVC") as? SecondViewController else {
return
}
//지금 이 view controller을 nextVC(다음화면)의 이전화면으로 설정
nextVC.previousViewController = self
//다음 화면으로 넘어가기
self.present(nextVC, animated: true, completion: nil)
}
}
- ChangeLabelDelegate 라는 protocol을 선언해 줌.
- var delegate : ChangeLabelDelegate
일을 위임할 delegate 변수를 선언해 주는 것인데, 이 delegate 변수를 사용하여, 위임받는 객체가 protocol의 기능을 사용하도록 함. - nextVC.previousViewController = self
지금 이 viewController을 nextVC(다음 화면)의 이전화면으로 설정함.
import UIKit
//프로토콜 메소드를 준수해라
class SecondViewController: UIViewController, ChangeLabelDelegate {
func doChange() {
//이전화면에 있는 label의 텍스트에 dataTextField의 text값을 넣겠다
previousViewController?.label.text = self.dataTextField.text
}
var text: String?
var previousViewController: ViewController?
//전 화면이 어떤 것인지 알기 위해 설정한 ViewController 타입 변수
@IBOutlet weak var dataTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
//previousViewController이 시키는 일을 자신이 하겠다고 선언
previousViewController?.delegate = self
}
//이전 화면으로 버튼을 누르면
@IBAction func buttonDIsmiss(_ sender: UIButton) {
doChange() //do change 함수를 호출한당
self.dismiss(animated: true, completion: nil)
}
}
- class SecondViewController: UIViewController, ChangeLabelDelegate
ChangeLabelDelegate라는 프토토콜을 준수해야 함. 프로토콜에 있던 메소드도 마저 작성해 주어야 한다.
- func doChange() 작성 - var previousViewController: ViewController?
전 화면이 어떤 것인지 알기 위해 선언한 ViewController 타입 변수 - previousViewController?.delegate = self
previousViewController이 시키는 일을 자신이 하겠다고 선언함.
위임하는 쪽에선 protocol을 선언, 일을 위임하겠다는 delegate 변수를 선언해 줌.
위임받는 쪽에선 자신이 위임받겠다는 것을 표시하고 프로토콜 메소드를 완성해야 함.
<첫 번째 화면>
<두 번째 화면>
<첫 번째 화면으로 화면 복귀> - 첫 번째 화면의 label이 변경됨
Udemy - 누구나 따라할 수 있는 클론코딩
Author And Source
이 문제에 관하여([UMC-iOS] delegate 패턴으로 화면 간 데이터 전달하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@vvkkiie/UMC-Protocol-로-화면-간-데이터-전달하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)