Whenever I try to present a UISplitViewController modally the application crashes. Thus it must allways be the root view controller. Can anyone confirm that?
5 に答える
Split View Controller のビューは、常にアプリケーション ウィンドウのルート ビューとしてインストールする必要があります。ナビゲーションまたはタブ バー インターフェイス内に分割ビューを表示しないでください。
そうです、メイン アプリケーション ウィンドウの外に分割ビューを表示することはできません (モーダルを含む)。
編集
上記のドキュメントへのリンクでは、このトピックについては説明されていません。関連する議論は、Apple のView Controller Catalog for iOSで見つけることができ、次のように述べられています。
分割ビュー コントローラーは、作成するすべてのインターフェイスのルートである必要があります。つまり、アプリケーションのウィンドウのルート ビューとして常に UISplitViewController オブジェクトからビューをインストールする必要があります。[...] Split View Controller はモーダルに表示できません。
通常のコンテンツビューコントローラーからセグエしようとしたときに、同じエラーで同じ問題が発生しました(つまり、タブコントローラーまたはナビゲーションコントローラーからセグエグしても問題ありません)。
幸いなことに、VC と分割ビュー コントローラーの間にナビゲーション コントローラーを挿入することで、これを回避する方法を見つけました。つまり、VC からナビ コントローラーにセグエし、ナビ コントローラーと分割ビュー コントローラーの間に関係接続を描画します。このように、分割ビューのインスタンス化にはコーディングは必要ありません。
もちろんUISplitViewController
、ルートView Controllerとして使用しなくても使用できます。私のプロジェクトでは、次のように使用します。
- モーダル メソッドで自分のビュー コントローラーを表示します。
[self presentModalViewController:mainViewController アニメーション:YES];
- mainViewController には、
UISplitViewController *splitViewController;
で、 を- (void)viewDidLoad
に設定splitViewController.view
します。mainViewController.view
splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil];
self.view = splitViewController.view;
UISplitController は UITabBarController の下にインストールできます。私がやる。このフォーラムで検索してみてください。少なくとも 1 つの優れたソフトウェア サンプルが見つかりました。
はい、まさに RootViewController を使用する必要があり、UITableViewController から継承する必要があります。このチュートリアルをご覧ください