デリゲートとプロトコルについて、お聞きしたいことがございます。
こちらなどの記事を参考にデリゲートについて調べていたのですが、疑問な点が多々ありました為、お聞きしたくご質問させて貰いました。
リンク先の以下のコードについてなのですが、textField.delegate
こちらの部分はいわば、「処理を任せる側(移譲元)」であり、今回の場合はself
を指定している為、「ViewController」クラスであると推察いたしました。
しかし、疑問な点なのですが、そもそもtextField
はインスタンス化していない為、インスタンス変数でないにも関わらず、何故「delegate」プロパティを持つことができるのでしょうか...?
またデリゲートの場合だと処理を任せられるクラスで実装しなければいけないメソッド(プロトコル)があると思うのですが、それがなぜ、「textFieldShouldReturn」メソッドなのでしょうか...?「UITextFieldDelegate」には「textFieldShouldReturn」も含まれてはいますが、その他にも複数のメソッドがプロトコルとして、存在していました。
swift
1import UIKit 2// UITextFieldDelegateに準拠する 3// ViewControllerが移譲先にもなっている。 4class ViewController: UIViewController, UITextFieldDelegate { 5 6 @IBOutlet weak var label: UILabel! 7 @IBOutlet weak var textField: UITextField! 8 9 override func viewDidLoad() { // 画面がロードされた際に実行される 10 super.viewDidLoad() 11 12 textField.delegate = self 13 // textFiledのdelegateプロパティにプロトコルに準拠したtextFieldShouldReturnメソッドを含むViewControllerインスタンスをもたせる 14 // つまり画面ロード後には画面のテキストフィールドに文字入力してエンターを押すとtextFieldShouldReturnメソッドを含むなんらかの処理が実行されるtextFieldインスタンスができあがる。 15 16 } 17 18 override func didReceiveMemoryWarning() { 19 super.didReceiveMemoryWarning() 20 21 } 22 23 @IBAction func tapButton(_ sender: Any) { 24 label.text = textField.text 25 } 26 27 // エンターを押した時に呼ばれるメソッド プロトコルに準拠させるため下記メソッドは記述必須 28 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 29 30 label.text = textField.text 31 32 textField.resignFirstResponder() // キーボードを閉じる 33 34 return true 35 } 36 37 38}
デリゲートについて、少々混乱してしまいました為、どなたか教えて頂ければ幸いです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/18 05:05 編集
2019/11/18 05:22
2019/11/18 05:31 編集
2019/11/18 05:41
2019/11/18 05:54