1. ホーム
  2. アイオス

[解決済み】モーダルViewControllerのプレゼンテーションスタイルがUIModalPresentationFormSheetの場合、iPadのキーボードが解除されない。

2022-04-11 02:41:13

質問

注意事項

iOS 4.3 での解決策については、受理された回答 (上位に投票されたものではありません) を参照してください。

これは 質問 は、iPadのキーボードで発見された、ナビゲーションコントローラー付きのモーダルダイアログに表示されると解除されないという動作に関するものです。

基本的に、ナビゲーションコントローラーに以下のような行を提示すると。

navigationController.modalPresentationStyle = UIModalPresentationFormSheet;

キーボードが解除を拒否します。この行をコメントアウトすると、キーボードは問題なく消えます。

...

ユーザー名とパスワードの2つのtextFieldがあり、ユーザー名にはNextボタンが、パスワードにはDoneボタンがあります。モーダルナビゲーションコントローラーでこれを表示すると、キーボードが消えません。

ワークス

broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
[self.view addSubview:b.view];

動作しない

broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
UINavigationController *navigationController = 
[[UINavigationController alloc]
 initWithRootViewController:b];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
navigationController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:navigationController animated:YES];
[navigationController release];
[b release];

ナビゲーションコントローラの部分を削除して、'b' を単独でモーダルビューコントローラとして表示すると、動作します。ナビゲーションコントローラーが問題なのでしょうか?

ワークス

broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
b.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:b animated:YES];
[b release];

ワークス

broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
UINavigationController *navigationController = 
    [[UINavigationController alloc]
         initWithRootViewController:b];
[self presentModalViewController:navigationController animated:YES];
[navigationController release];
[b release];

解決方法は?

モーダル表示されるビューコントローラーに disablesAutomaticKeyboardDismissal を返すようにしました。 NO :

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}