はじめに
提供中のKeyHolderにて、UITextFieldで入力チェックを行っております。
こんな感じでUITextFieldに何も入力されていない場合は、画面右上の保存を非表示にし、
こんな感じでUITextFieldに入力されている場合は、画面右上の保存を表示しています。
やりかた
UITextFieldTextDidChangeを利用すると比較的簡単に実装できます。
以下は実装例です。
class SampleViewController: UIViewController { override func viewDidLoad() { NotificationCenter.default.addObserver(self, selector: #selector(SampleViewController.changeNotifyTextField(sender:)), name: NSNotification.Name.UITextFieldTextDidChange, object: nil) } } public func changeNotifyTextField (sender: NSNotification) { guard let textView = sender.object as? UITextField else { return } if textView.text != nil { saveButton.isEnabled = textView.text != "" } }
senderの中に変更があったUITextFieldが入ってくるので、これをみて判断するだけです。
他の解決策
上記以外だったら、UITextFieldのDelegateを使うのも一手かもしれません、、、入力確定後の判定となるため、私はうまいやりかたを見つけられていません。
以下の例ではある程度の所は担保出来るのですが、上述通り予測変換等、入力確定前の情報がうまく取れません。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { var mutableText = "" if let textFieldString = textField.text { mutableText = mutableText + textFieldString } if mutableText == "" && string == "" { } else if (string == "") { mutableText = mutableText.substring(to: mutableText.endIndex) } else { mutableText = mutableText + string } saveButton.isEnabled = mutableText != "" return true }
ちなみに入力確認前の画面イメージは以下です。
UITextFieldTextDidChangeを使うと簡単に実現出来るので、こちらを使っておいたほうが良いかなと言う所感です。