アプリのログイン画面を作成していますが、まだ入力されていないフィールドがある場合は[次へ]と表示し、すべてのフィールドが入力されている場合は[実行]と表示する必要があります( UITextFields)。
以下のコードは、正しいタイミングでNextとGoを表示するという点で正常に機能します。ただし、「次へ」から「実行」に変わると、キーボードの次のタップは無視されます。「Go」と表示され、バックスペースでテキストフィールドを空にすると、そのような問題は発生せず、Nextが表示されます。古いキーボードがまだそこにあり、タップすると消えてしまうようなものです。
私の質問は、この問題の原因は何ですか、そしてもっと重要なことに、キーボードのこのフリーズを取り除くにはどうすればよいですか?
UITextField *theSender = (UITextField *)sender;
if (allTextFieldsAreFilled) {
if (theSender.returnKeyType!=UIReturnKeyGo) {
theSender.returnKeyType = UIReturnKeyGo;
[theSender resignFirstResponder];
[theSender becomeFirstResponder];
}
} else {
if (theSender.returnKeyType!=UIReturnKeyNext) {
theSender.returnKeyType = UIReturnKeyNext;
[theSender resignFirstResponder];
[theSender becomeFirstResponder];
}
}
このコードは、3つのUITextFieldのいずれかの値が変更されるたびに呼び出されるため、EditingChangedイベントに接続されたIBActionです。
よろしくお願いします!
編集
これは、テキストフィールドがセキュア(パスワード)に設定されている場合にのみ発生することがわかりました。セキュアに設定されていない場合、フリーズせず、コードは完全に機能します。問題は、「安全な」テキストフィールドが最初の応答者である場合に、「実行」ボタンへの変更が一般的に発生することです。したがって、これによって問題が変わることはありません。