私もこれと同じ問題を抱えています。あなたの質問にコメントを投稿する方法がわからない (私はまだスタック オーバーフローに慣れていない) ので、これまでにわかったことを部分的な回答として提供します。まだ完全なソリューションを研究しています。
Xcode 4.5.1 を使用し、私のアプリは iOS 6 を使用します。これは Core Data を使用するユニバーサル アプリであり、iPhone 側は正常に動作します。iPad側はSplit Viewです。詳細ビュー コントローラーから、ユーザーは分割ビュー上でフル ウィンドウを開いて写真を表示できます。写真ビューを閉じると、分割ビューに戻ります。
以下のコードは、フォト ブラウザがどのように呼び出され、閉じられるかを示しています。
[self presentViewController:photoBrowser animated:YES completion:nil];
[self dismissViewControllerAnimated:YES completion:nil];
写真ビューが閉じられた後、キーボードの問題が発生します。
症状: UITextFields または UITextViews を使用した後続のビューで、キーボードが自動的に表示されなくなるか、写真の例のようにキーボードが部分的にしか表示されなくなります。becomeFirstResponder を使用してキーボードを表示します。
[self.noteEdit becomeFirstResponder];
また奇妙なのは、UITextField に触れると、そのビューのすべてのテキスト フィールドが消えることです。
この問題について、Apple Technical Support Incident (TSI) をオープンしました。2012 年 10 月 12 日の返信は次のとおりです。
あなたの事件の最新情報をお伝えしたいと思います。コードとサンプル データベースをお送りいただきありがとうございます。問題を再現できました。詳細ビュー コントローラーでテキスト フィールドが消えるのは、キーボードが UIKeyboardFrameEndUserInfoKey に対して無効なデータを返し、コードがスクロール ビュー フレームを無効なサイズに設定した結果であることが判明しました。この予期しないキーボードの動作の根本的な原因を探し続けており、答えがわかり次第返信します。
UIKeyboardFrameEndUserInfoKey userInfo の値を表示して、彼の返信を確認しました。
NSLog(@"keyboardEndFrame orig.x=%f orig.y=%f size.w=%f, size.h=%f",
keyboardEndFrame.origin.x, keyboardEndFrame.origin.y, keyboardEndFrame.size.width, keyboardEndFrame.size.height);
案の定、原点 x と y の両方の値は "inf" でした。サイズ値はゼロに設定されました。
今、私はこのすべての原因を知る必要があります。まだ調査中ですが、Apple からの回答があればお知らせします。これはこれまでのところ私を困惑させました。
PS ... 私のアプリ (iPhone & iPad) は iOS 5 で正常に動作していました。
更新 - 2012 年 10 月 17 日:
キーボードの問題の原因は、iOS 6 が方向を処理する新しい方法を実装する際のエラーが原因でした。Split View Controller をサブクラス化して、以下を含めました。
- (NSUInteger)supportedInterfaceOrientations {
return [[self splitViewController] supportedInterfaceOrientations];}
修正されたコードは次のとおりです。
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;}
これは、私の Apple Technical Support Incident が次のように返信したときに指摘されました。
キーボードのトラブルの根本原因を突き止めました。SplitController.m では、メソッド supportedInterfaceOrientations が次を呼び出します。 [[self splitViewController] supportedInterfaceOrientations]; 受け取った値を返します。ただし、分割ビュー コントローラの splitViewController プロパティは nil です。これは、他の分割ビュー コントローラ内の分割ビュー コントローラが許可されていないためです。したがって、返される値は 0 であり、これは無効な方向マスクです。
私のアプリは、スタックの一番上にあるビューに基づいてさまざまな方向タイプをサポートしていますが、Split View Controller を正しくコーディングしていませんでした。
Apple テクニカル サポート グループは私を大いに助けてくれました。この情報がお役に立てば幸いです。
乾杯!