1

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誰がポップオーバーのボタンを表示するかを委任するために使用される単なるプロトコルです (ご想像のとおりです!)。

4

0 に答える 0