ああ、これは私に数日間頭痛を引き起こし、これを行う方法を理解できませんでした。最悪の部分は、マスター/詳細テンプレートを使用した新しいXcode iOSプロジェクトの作成がうまく機能したことです。幸いなことに、結局のところ、その小さな事実が私が解決策を見つけた方法でした。
私が見つけたいくつかの投稿がありますが、解決策はに新しいprimaryViewControllerForCollapsingSplitViewController:
メソッドを実装することUISplitViewControllerDelegate
です。私はそれを無駄にしようとした。Appleがマスター/ディテールテンプレートで機能しているように見えることは、新しい(このすべてを言うには深く息をする)splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:
デリゲートメソッドを実装することです(ここでもUISplitViewControllerDelegate
)。docsによると、このメソッドは:
デリゲートに、プライマリビューコントローラーを調整し、セカンダリビューコントローラーを折りたたまれたインターフェイスに組み込むように要求します。
より具体的な詳細については、そのメソッドの説明部分を必ずお読みください。
Appleがこれを処理する方法は次のとおりです。
- (BOOL)splitViewController:(UISplitViewController *)splitViewController
collapseSecondaryViewController:(UIViewController *)secondaryViewController
ontoPrimaryViewController:(UIViewController *)primaryViewController {
if ([secondaryViewController isKindOfClass:[UINavigationController class]]
&& [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]]
&& ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)) {
// Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
return YES;
} else {
return NO;
}
}
この実装は基本的に次のことを行います。
- 場合
secondaryViewController
我々は(期待しているものですUINavigationController
()、そして我々が期待しているものを見せているDetailViewController
-あなたのビューコントローラ)が、(何のモデルを持っていないdetailItem
「その後、)Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
」
- それ以外の場合は、「返して
NO
、分割ビューコントローラーにセカンダリビューコントローラーのコンテンツを折りたたまれたインターフェースに組み込みます」
iPhoneの縦向きの結果は次のとおりです(縦向きで開始するか、縦向きに回転するか、より正確にはコンパクトサイズクラス)。
- あなたの見解が正しい場合
- モデルがあり、詳細ビューコントローラーを表示します
- モデルはありませんが、マスタービューコントローラーを表示します
- あなたの見方が正しくない場合
泥としてクリア。
UISplitViewController
、常にYES
そのメソッドから戻り、iPhoneのマスターを常に縦向きに表示したいので、ストーリーボードの分割ビュークラスを変更しました。:)