私は、分割ビューのマスター ペインと詳細ペインにプレーンのある a のUISplitViewController
内側を使用しています。UITabBarController
UIViewController
UINavigationController
UIViewController
Apple がルート レベルでのみ分割ビューを使用するようにアドバイスしていることは承知していますが、タブで分割ビューを使用する他のアプリケーション (Amazon の [ウィッシュ リスト] タブなど) を見たので、それが可能であると確信しています。
私の問題は、分割ビューのデリゲート メソッドです。のものUISplitViewControllerDelegate
が呼び出されないため、ポートレート モードに切り替えたときにポップオーバー メニューを作成できません。
問題の方法は次のとおりです-
// Called when a button should be added to a toolbar for a hidden view controller
- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc;
// Called when the view is shown again in the split view, invalidating the button and popover controller
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem;
// Called when the view controller is shown in a popover so the delegate can take action like hiding other popovers.
- (void)splitViewController: (UISplitViewController*)svc popoverController: (UIPopoverController*)pc willPresentViewController:(UIViewController *)aViewController;
はローテーション通知を受け取りますUISplitViewController
。
アプリの起動時にステータス バーの向きを強制的に右 (または左) にすると、 willShowViewControllerメソッドを呼び出すことができます。
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
ただし、 はwillHideViewController
呼び出されません。また、アプリを強制的に横向きで起動したくありません。同じことをして強制的に縦向きにすると、コールバックが届きません。
分割ビュー コントローラーがデリゲート メソッドを呼び出さない理由がわかりません。それ以外の場合は正しく動作しています。これらのメソッドは、そのメソッドから呼び出す必要があります-
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
内部でブレークポイントを設定すると、デリゲートが設定されていて、まだ有効であることを確認できます。
一日中これにこだわっています!他のすべてはうまく機能しており、splitview / tabbar / navbar の組み合わせがうまく機能していることを非常に嬉しく思います. これらの通知が必要です。
回転するときに手動で呼び出す必要がありますか? `UISplitViewController' がこれを行う必要がある場合、非常に間違っているようです。