注意:
iOS 4.3以降の解決策については、承認された回答(上位投票ではない)を参照してください。
この質問は、iPadのキーボードで発見された動作に関するもので、ナビゲーションコントローラーのあるモーダルダイアログに表示された場合、その動作は却下されません。
基本的に、ナビゲーションコントローラーに次の行を表示すると、次のようになります。
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
キーボードは却下されません。この行をコメントアウトすると、キーボードは正常に消えます。
...
ユーザー名とパスワードの2つのtextFieldがあります。ユーザー名には[次へ]ボタンがあり、パスワードには[完了]ボタンがあります。これをモーダルナビゲーションコントローラーに表示しても、キーボードは消えません。
WORKS
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」を表示すると、機能します。ナビゲーションコントローラーに問題がありますか?
WORKS
broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
b.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:b animated:YES];
[b release];
WORKS
broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil];
UINavigationController *navigationController =
[[UINavigationController alloc]
initWithRootViewController:b];
[self presentModalViewController:navigationController animated:YES];
[navigationController release];
[b release];
UINavigationController
授業用のカテゴリーに入れてみました。乾杯。
resignFirstResponder
が実行されているのには驚きましたが、キーボードはまだ表示されています。私のシナリオ(navig contrllrを使用したpresentationFormSheet)は、あなたのシナリオとまったく同じです。トンありがとう!