見出し画像

Swift 勉強11.ナビゲーションコントローラ👉画面の切り替え(2) ビューの切り替えとメッセージ配信

1.メッセージ配信のためにストーリーボードに追加作業

- メイン画面/修正画面にLabel追加 Messageに変更&テキストフィールド(Text Field)追加

- メイン画面のテキストフィールドアウトレット変数を追加

@IBOutlet var txMessage: UITextField!

- 修正画面のテキストフィールドをクリックした後、エディタ領域にドラッグして接続します。ドラッグする前に、セカンダリエディタ領域が「エディットビューコントローラクラス」なのかを確認する。

- メッセージを配信するためのコーディング作業

- EditViewController.swift を選択コードを追加

var textMessage: String = ""
:
//修正画面から直接テキストフィールドのテキストを制御することができないので、変数textMessageを文字列にする。

   override func viewDidLoad() {
       super.viewDidLoad()
       // Do any additional setup after loading the view.
       
       lblWay.text = textWayValue
       txMessage.text = textMessage
//viewDidLoad関数で変数textMessage値をテキストフィールドのテキストに代入して、テキストフィールドに表示される。

   }

- EditDelegateプロトコルを作成

import UIKit
protocol EditDelegate {
   func didMessageEditDone(_ controller: EditViewController, message: String)
}

- ViewController.swiftを選択/ 前のプロトコルで作成したEditDelegateをビューコントローラクラス宣言の中に入れ継承

class ViewController: UIViewController, EditDelegate {
   
   @IBOutlet var txMessage: UITextField!
   
   override func viewDidLoad() {
       super.viewDidLoad()
       // Do any additional setup after loading the view, typically from a nib.
      
   }
   func didMessageEditDone(_ controller: EditViewController, message: String) {
       txMessage.text = message
   }

- didMessageEditDone関数はエディットビューコントローラから関数を呼び出してメッセージを配信 - >メッセージの文字列値をメイン画面のテキストフィールドにテキストを示している。

    func didMessageEditDone(_ controller: EditViewController, message: String) {
       txMessage.text = message
   }

- delegate変数を作成

    var textWayValue: String = ""
   var textMessage: String = ""
   var delegate : EditDelegate?

- [修正画面]のbtnDone関数でdidMessageEditDoneを呼び出しながら、[修正画面]のテキストフィールドの内容をメッセージ文字列として渡されます。すなわち、[修正画面]のテキストフィールドの内容、すなわちデータを[メイン画面]で配信

    @IBAction func btnDone(_ sender: UIButton) {
       if delegate != nil {
           delegate?.didMessageEditDone(self, message: txMessage.text!)
       }
       _ = navigationController?.popViewController(animated: true)
   }

- ViewController.swift を選択/ prepare関数の最後の部分にコードを追加

editViewController.delegate = self

\これで終わり/

修正画面に移動した後、メッセージウィンドウに修正完了を入力
完了ボタンをクリックすると、メイン画面に同じ内容が表示される。修正画面のデータがメイン画面に移動