2017-11-12 7 views
0

3つのテキストフィールドを持つNIBファイルをセットアップしました。フィールドが空であるかどうかをチェックしたい何もしない場合。空の文字列ステートメントがSwiftのNIBファイルで正しく動作しない

私はフィールドが編集されたかどうかをチェックするためのデリゲートパターンを使用しています:

@IBAction func didEditingText(_ sender: UITextField) { 

    if self.textInputOne.text != "" { 
     delegate?.formIsFilled(delegateCalled: true) 
    } else { 
     delegate?.formIsFilled(delegateCalled: false) 
    } 

} 

この機能は、各フィールドにリンクされています。もう空でないときは、ボタンをアクティブにします。しかし、フィールドを空白のままにしても、ボタンはアクティブになります。私が知っているように、私のifステートメントは、テキスト入力が空のStringではないかどうかをチェックしていますが、他のVCのデリゲートがまだ呼び出されています。これをどうすれば解決できますか?

+0

コントロールイベントがその機能にどのように接続されているか教えてください。また、デリゲートメソッドをどのように実装しましたか?また、テキストフィールドのいずれかが入力されたとき、またはテキストフィールドのすべてが満たされたときに、ボタンをアクティブにしますか? – Sweeper

答えて

1

ifの条件では、3つのフィールド(self.textInputOne.text != "")のいずれかのみをチェックしています。三つのフィールドを同じ関数に配線されているとして、あなたは次のようにそれがあるので、条件を変更する必要があります。

@IBAction func didEditingText(_ sender: UITextField) { 

    if sender.text != "" { // You can use !sender.text.isEmpty too 
     delegate?.formIsFilled(delegateCalled: true) 
    } else { 
     delegate?.formIsFilled(delegateCalled: false) 
    } 
} 

をこの方法で、あなたは、フィールドの編集を終了するとき、そのフィールドが空の場合、この関数はチェックしますかあなたの代理人に電話しないでください。あなたは、いくつかのテキストフィールドを持っている場合は

+1

...または単に 'delegate?.formIsFilled(delegateCalled:sender.text.isEmpty)' – Grimxn

1

同じ時間/関数内のすべてのそれらをチェックした方がよいでしょう。

func validation() -> Bool { 
    for tf in [textFieldFirst, textFieldSecond, textFieldThird] { 
     guard let text = tf?.text, !text.isEmpty else { return false } 
    } 
    return true 
} 

は、以前はあなたのを確認することができますが、UITextFieldDelegate

func textFieldDidEndEditing(_ textField: UITextField) { 
    button.isEnabled = validation() 
} 

内で呼び出すことができる機能を説明しましたviewDidLoad()の検証またはビューの初期化後:

override func viewDidLoad() { 
    super.viewDidLoad() 

    button.isEnabled = validation() 
} 

in the linkを確認することができます。

正しい検証の結果、どんな結果でも委譲メソッドを呼び出すことができます。

関連する問題