2017-06-21 1 views
0

2つのテキストフィールドがあります。テキストがピッカービューで変更されたときにonTextChangeターゲットが呼び出されない - iOS Swift

一つは、人のタイプのためにある:「夫、 『妻』、 『シングル』、 『子』 他は、出生順位のためにある

私は出生順位のテキストフィールドがときにのみ有効にすることにしたいです。

人型テキストフィールドの入力ビューは、4つのオプションを持つピッカービューです。人型テキストフィールドにターゲットを追加しようとしました:

personTypeTextField.addTarget(self, action: #selector(onTextChange), for: UIControlEvents.editingChanged) 

次に、onTextChange関数は、 :

func onTextChange() { 
    if personTypeTextField.text == "Child" { 
     birthOrderTextField.isEnabled = true 
    } else { 
     birthOrderTextField.isEnabled = false 
     birthOrderTextField.text = "" 
    } 
} 

ただし、ピッカービューで人物タイプを選択すると、onTextChange関数は呼び出されません。それはなぜ呼ばれないのですか?

答えて

1
あなたが代わりにテキストフィールドセレクタのUIPickerViewのdelgate法の下に使用することができます

FUNCのpickerView(UIPickerView、didSelectRow:INT、inComponent:INT)の選択行に対応

をユーザーがコンポーネント内の行を選択したときにピッカービューによって呼び出されます。

self.personTypeTextField.text = YOUR_ARRAY[row] 

最後にpickerViewにデリゲートを割り当てることを忘れてはいけない

if personTypeTextField.text == "Child" { 
     birthOrderTextField.isEnabled = true 
    } else { 
     birthOrderTextField.isEnabled = false 
     birthOrderTextField.text = "" 
    } 

をご確認ください。

+0

ありがとうございます。私はすでにテキストフィールドのテキストを設定するためにpickerView didSelectRowメソッドを実装していたので、これを行うと思っていたはずです。しかし、値がピッカービューで変更されても、textFieldの値が変更された関数が呼び出されるとは思うでしょう。 –

0

私が正しく理解している場合は、入力ビューに直接入力するのではなく、ピッカービューからオプションを選択してください。私はあなたがpersonTypeTextField.textに新しい値をプログラムで割り当てると思います。その場合、入力ビューは決してユーザーによって編集されなかったため、UIControlEvents.editingChangedターゲットは呼び出されないのが普通です。ピッカーが値の選択を終えたら、関数を実行する必要があります。

関連する問題