iPadが縦向きのときに分割ビューの左側を非表示にし、ツールバーに配置されたボタンが押されたときにポップオーバーとして表示するデモに従っています。私はすべてを段階的にたどりましたが、ボタンを押すと、ポップオーバーの代わりにビューが左から右にスライドして表示されることを除いて、(一種の) 動作します。また、ボタンを押す代わりに、指を左から右にスライドさせても同じ結果が得られることに気付きました。これは私が使用するコードです (同じコードがデモで正しく動作します)。
ポップオーバーに表示する必要があるビューのビュー コントローラーで:
-(BOOL)splitViewController:(UISplitViewController*)svc
shouldHideViewController:(UIViewController*)vc
inOrientation:(UIInterfaceOrientation)orientation
{
return [self splitViewBarButtonItemPresenter] ? UIInterfaceOrientationIsPortrait(orientation) : NO;
}
-(void)splitViewController:(UISplitViewController *)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem *)barButtonItem
forPopoverController:(UIPopoverController *)pc
{
barButtonItem.title = self.title;
[self splitViewBarButtonItemPresenter].splitViewBarButtonItem = barButtonItem;
}
-(void)splitViewController:(UISplitViewController *)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
[self splitViewBarButtonItemPresenter].splitViewBarButtonItem = nil;
}
そして、ポップオーバーを表示する必要があるビューで:
-(void)setSplitViewBarButtonItem:(UIBarButtonItem *)splitViewBarButtonItem
{
if (_splitViewBarButtonItem != splitViewBarButtonItem){
NSMutableArray *toolbarItems = [self.toolbar.items mutableCopy];
if (_splitViewBarButtonItem) [toolbarItems removeObject:_splitViewBarButtonItem];
if (splitViewBarButtonItem) [toolbarItems insertObject:splitViewBarButtonItem atIndex:0];
self.toolbar.items = toolbarItems;
_splitViewBarButtonItem = splitViewBarButtonItem;
}
}
SplitViewBarButtonItemPresenter
誰がポップオーバーのボタンを表示するかを委任するために使用される単なるプロトコルです (ご想像のとおりです!)。