2017-08-18 11 views
0

私は何かに直面しており、私はそれを理解できません。TextFieldの代理人

enter image description here

私は見てのチュートリアル、講師プレス(CNTRL +クリック)デリゲートオプションで

とのViewControllerクラスにドラッグします。その後、テキストフィールドのオプションは写真のようになります。私はたくさん検索して説明を見つけましたが、私はそれを正確に理解できませんでした。

説明:UITextFieldDelegateメソッドを使用できるようにするには、ViewControllerクラスでこのプロトコルを採用する必要があります。ただし、メソッドを使用する前に、この委任オプションを選択する必要があります。

このオプションはわかりません。それのメリットは何ですか? UITextFieldDelegate

のみ、その後、デリゲート関数はビューコントローラで使用することができるよう

+2

それは避けることだけです。これは1行だけを避けることができますが、実際には '@property(nonatomic、weak)IBOutlet * myUITextFieldIBOutlet;を実行したくない場合もあります。 – Larme

+0

UITextFieldDelegateプロトコルをViewControllerに追加します。 class ViewController:UIViewController、UITextFieldDelegate –

+0

デリゲートオブジェクトを設定するのを忘れることはないでしょう。コードにメソッドを追加するが、ViewControllerをデリゲートとして設定しないと、それらのメソッドは呼び出されません。 – leandrodemarco

答えて

0

まず、あなたのビューコントローラにデリゲートを追加します。

機能が期待どおりに機能するように、 テキストフィールドの代理人を自己として設定する必要があります。例: textfield.delegate = self

テキストフィールドの代理人を自己として設定することは、インストラクタが(あなたが言ったように)同じことをするプログラム的な方法です。それを使用して、これらの手順を試して理解するためにとても

1

1 UITextViewDelegateのコールバックメソッドを実装するので、

class MyViewController: UIViewController, UITextViewDelegate { 

2のようなあなたのクラスにUITextFieldDelegateプロトコルを採用しています。たとえば:

//MARK: UITextViewDelegate 

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
     print(textField.text ?? "") 
     return true 
    } 

enter image description here

これらのメソッドは、管理とのTextViewのテキストを検証するために作られています。 protocolsについてお読みください。

また、ストーリーボードを直接フォームに設定する理由がわからない場合は、クラスで宣言された追加のプロパティを持たないためです。私はシームレスに行われます、あなたは、あなたのクラスでこれを持っていません: `myUITextFieldIBOutlet.delegate =自己;`のUIViewControllerに:

@IBOutlet weak var myTextField: UITextField! 

    //... 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     myTextField.delegate = self 
    }