[Xcode] iPadでresignFirstResponderできない場合

resignFirstResponderしてるのにキーボードが閉じない!

iPadで、UIModalPresentationFormSheetなモーダルView内では、キーボードを閉じれなくなります。

UIViewControllerのdisablesAutomaticKeyboardDismissal値が、
UIModalPresentationFormSheetの場合に、YESが返って、キーボード閉じれません状態になっている。

というのが、
UIViewController Class ReferenceのdisablesAutomaticKeyboardDismissalに書いてあった。

閉じれるようにするには、対象のUIViewControllerのサブクラスで、
disablesAutomaticKeyboardDismissalをオーバーライドして、NOを返しておけばいいようだ。

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}

ipad – Modal Dialog Does Not Dismiss Keyboard – Stack Overflow

検索したら見つかったこちらを参考にしたのだけど、
ここに紹介のある、以下のコードがよさそうだったので、結局こっちにした。

これを対象のUIViewControllerソースの一番上にでも書いておくとOK

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

UIModalPresentationFormSheetとなっているのがUINavigationControllerなので、そのUINavigationControllerのdisablesAutomaticKeyboardDismissalを聞かれた時に、ナビのtopViewController(resignしようとかしてるView)のdisablesAutomaticKeyboardDismissal値を返している。
そのViewはUIModalPresentationFormSheetではないので、標準値が返り、キーボードを閉じれる状態となると。

読みづらくてすみません!

シェアする

  • このエントリーをはてなブックマークに追加

フォロミー

コメントをどうぞ

メールアドレスが公開されることはありません。