[UMC-iOS]委任モードを使用して画面間でデータを転送


委任モードを使用して画面間でデータを転送😀

2つのview controllerを作成し、
最初の画面にlabelと<次の画面>ボタンを作成します.
2番目の画面にtextFieldと<前の画面>ボタンを作成します.
最初の画面で<次の画面>ボタンを押すと画面を切り替え、2番目の画面でtextFieldにテキストを入力し、<前の画面>ボタンを押すと、最初の画面のlabelが入力値になります.
(画面間データ転送)
  • 画面遷移概念
  • protocol
  • delegate
  • 最初のビューコントローラ-ビューコントローラクラスに関連付けられます
    2番目のビューコントローラ-SecondView Controlクラスに関連付けられています
    //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プロトコルを発表します.
  • var delegate : ChangeLabelDelegate
    作業を委任する委任変数を宣言します.この委任変数を使用すると、委任されたオブジェクトがプロトコルの機能を使用していることを確認できます.
  • 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 do Change()
  • の作成
  • var previousViewController: ViewController?
    ViewControllerタイプ変数
  • 、フルスクリーン表示について
  • previousViewController?.delegate = self
    PreviousViewControllerは自分が私にやらせたことをすると宣言した.
  • 委託側はプロトコルを宣言し、委託側は委任作業の委託変数を宣言する.
    委任された側は、自分が委任されることを表明し、合意方法を完了しなければならない.
    <最初の画面>

    <2画面目>

    <最初の画面に戻る>-最初の画面のラベルが変更されました

    Udemy-誰もが真似できるクローンコード