web-dev-qa-db-ja.com

モーダルダイアログがキーボードを閉じない

UITextFieldまたはUITextViewUIModalPresentationFormSheetに残すと、キーボードが閉じられない問題が発生します。さらに、ユーザーがフィールドの外側をタップするとトリガーされるように、ビューの背景として機能する大きなボタンを作成しました。通常のビューコントローラーで同じコードを使用していますが、期待どおりに動作します。モーダルビューコントローラーでは何もしません。任意の提案をいただければ幸いです。

- (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];
}
41
DenVog

以下のようにNOを返すようにdisablesAutomaticKeyboardDismissalをオーバーライドすると、私の同じ問題が修正されました。このコードをビューコントローラーに配置し、そこからキーボードを開始します。

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}

また、詳細な説明が必要な場合は、この [〜#〜] so [〜#〜] 質問を確認してください。

119
aslisabanci

UINavigationControllerに問題がある場合は、UIViewControllerのカテゴリよりも良い解決策があると思います。 UINavigationControllerの動作を変更して、topViewControllerに要求する必要があります(私の意見では、これはすべてのViewControllerコンテナーがこれを処理する方法です)。

@implementation UINavigationController (DelegateAutomaticDismissKeyboard)
- (BOOL)disablesAutomaticKeyboardDismissal {
    return [self.topViewController disablesAutomaticKeyboardDismissal];
}
51
Chris Trahey

モーダルビューを「フォームシート」のプレゼンテーションスタイルで表示している場合、Appleはキーボードを閉じないようで、ユーザーがどこにキーボードを飛び出して入りたくないのかを考えています。多くの編集(つまり、「フォーム」)を行う予定です。修正は、プレゼンテーションスタイルを変更するか、そのまま使用することです。

3
Kalle

UITextFieldDelegateプロトコルを実装する場合、テキストの検証を行うと、誤ってこの動作を引き起こす可能性があります。テキストが無効なときに検証コードがtextFieldShouldEndEditingからfalseを返す場合、フィールドはfirstResponderステータスを放棄することができず、キーボードは次のビューの画面に残ります。

詳細は ITextFieldのキーボードは閉じません。いいえ、本当に

1

disablesAutomaticKeyboardDismissalは、iOS 7では動作しませんでした。

しかし...画面上のUITextFieldsを単にdisabledすることでこの問題を解決することができました。

私の解決策は ここ で説明されています。

この回避策は、Modal UIViewControllersでも機能します。

うん...それも私を驚かせた!!

0
Mike Gledhill

UIModalPresentationPageSheetのサイズを変更することでこれを解決しました。私の答えを見てください ここ

0
azdev