ユーザー入力に対して一連の検証を行い、編集を終了できるかどうかを判断する UITextFieldDelegate があります。ある特定の例では、フィールドを空白のままにすることは無効です。
現在textField:shouldChangeCharactersInRange:replacementString:
、ユーザーが編集するたびにテキスト入力を検証するために使用しています。
問題は次のとおりです。ユーザーがフィールドを (小さな「x」ボタンで) クリアすると、検証コードが「無効」モードになり、ユーザーが有効なテキストを入力するまでナビゲートできなくなります。その後、ユーザーが電話を振って古いテキストを取得した場合、shouldChangeCharactersInRange
は再び呼び出されず、デリゲートはすべてが再び正常であることを認識せずに「無効」状態のままになります。
正しく使用しているかどうかはわかりませんが、組み込みの UITextFieldDelegate 機構が元に戻す/やり直しによるテキストの変更に対応できないようです。
このシナリオで適切な検証を行う最善の方法は何ですか? 実装するために本当に UITextField をサブクラス化する必要がありmotionEnded:withEvent:
ますか? UITextField の編集処理は、ユーザーが実際に入力したか、元に戻すために発生したかに関係なく、実際に独立しているように見えるので、実際にそのルートに行かなければならない場合は困惑します。