ユーザーが iPad の UIsplitView で横表示から縦表示に切り替えるたびに、ポップオーバー ビューが表示されるようにしたいと考えています。ユーザーはバーボタンをクリックして表示することができますが、ポートレートモードではこれを自動化したいと考えています。
3 に答える
" -(BOOL) shouldAutorotateToInterfaceOrientation" メソッド内で、デバイスの向きを確認します。縦向きの場合は、ユーザーがバー ボタンをクリックしたときに表示されるように、ポップオーバーを提示します。
ではごきげんよう。
UISplitViewController は、デリゲート (UISplitViewControllerDelegate) にメッセージを送信します。このデリゲート メソッドを実装して、ポップオーバーを表示できます。「詳細コントローラー」コードで次のようなことができます。
#pragma mark -
#pragma mark UISplitViewControllerDelegate implementation
- (void)splitViewController:(UISplitViewController*)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem*)barButtonItem
forPopoverController:(UIPopoverController*)pc
{
[barButtonItem setTitle:@"Your 'popover button' title"];
self.navigationItem.leftBarButtonItem = barButtonItem;
}
- (void)splitViewController:(UISplitViewController*)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
self.navigationItem.leftBarButtonItem = nil;
}
受け入れられた答え(を使用shouldAutorotateToInterfaceOrientation
)は私にはうまくいきません。ローテーション アーティファクトがある (4.2 および 5.0 iPad シミュレーター) か、起動時にのみ表示され、その後のローテーションでは表示されません (4.3 シミュレーター)。代わりに、小さなヘルパー関数を作成しました。
- (void)showPopoverInPortrait {
if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationPortrait) {
[self.masterPopoverController presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItem
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
これを内部で呼び出し- (void)viewDidLoad
、起動時にも処理します。