UITextField
またはUITextView
をUIModalPresentationFormSheet
に残すと、キーボードが閉じられない問題が発生します。さらに、ユーザーがフィールドの外側をタップするとトリガーされるように、ビューの背景として機能する大きなボタンを作成しました。通常のビューコントローラーで同じコードを使用していますが、期待どおりに動作します。モーダルビューコントローラーでは何もしません。任意の提案をいただければ幸いです。
- (BOOL)textFieldShouldReturn:(id)sender {
[titleTextField resignFirstResponder];
return YES;
}
- (BOOL)textViewShouldReturn:(id)sender {
[synopsisTextView resignFirstResponder];
return YES;
}
- (IBAction)textFieldDoneEditing:(id)sender {
[sender resignFirstResponder];
}
- (IBAction)textViewDoneEditing:(id)sender {
[sender resignFirstResponder];
}
- (IBAction)backgroundClick:(id)sender {
[titleTextField resignFirstResponder];
[synopsisTextView resignFirstResponder];
}
以下のようにNOを返すようにdisablesAutomaticKeyboardDismissal
をオーバーライドすると、私の同じ問題が修正されました。このコードをビューコントローラーに配置し、そこからキーボードを開始します。
- (BOOL)disablesAutomaticKeyboardDismissal {
return NO;
}
また、詳細な説明が必要な場合は、この [〜#〜] so [〜#〜] 質問を確認してください。
UINavigationController
に問題がある場合は、UIViewController
のカテゴリよりも良い解決策があると思います。 UINavigationController
の動作を変更して、topViewController
に要求する必要があります(私の意見では、これはすべてのViewController
コンテナーがこれを処理する方法です)。
@implementation UINavigationController (DelegateAutomaticDismissKeyboard)
- (BOOL)disablesAutomaticKeyboardDismissal {
return [self.topViewController disablesAutomaticKeyboardDismissal];
}
モーダルビューを「フォームシート」のプレゼンテーションスタイルで表示している場合、Appleはキーボードを閉じないようで、ユーザーがどこにキーボードを飛び出して入りたくないのかを考えています。多くの編集(つまり、「フォーム」)を行う予定です。修正は、プレゼンテーションスタイルを変更するか、そのまま使用することです。
UITextFieldDelegateプロトコルを実装する場合、テキストの検証を行うと、誤ってこの動作を引き起こす可能性があります。テキストが無効なときに検証コードがtextFieldShouldEndEditingからfalseを返す場合、フィールドはfirstResponderステータスを放棄することができず、キーボードは次のビューの画面に残ります。
disablesAutomaticKeyboardDismissal
は、iOS 7では動作しませんでした。
しかし...画面上のUITextFieldsを単にdisabledすることでこの問題を解決することができました。
私の解決策は ここ で説明されています。
この回避策は、Modal UIViewController
sでも機能します。
うん...それも私を驚かせた!!
UIModalPresentationPageSheetのサイズを変更することでこれを解決しました。私の答えを見てください ここ 。