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
\これで終わり/
修正画面に移動した後、メッセージウィンドウに修正完了を入力
完了ボタンをクリックすると、メイン画面に同じ内容が表示される。修正画面のデータがメイン画面に移動