2014-09-18 40 views
1

我正在创建一个具有一些UIBarButton项目的应用程序,其中一些将在按下时启动UIPopoverController。我希望这样做可以禁用任何可以与之交互的功能,这主要是默认情况下发生的。不过,我注意到,当弹出窗口处于活动状态时,同一工具栏中的其他UIBarButtonItem仍将处于活动状态。我试着添加:显示它,但UIPopover不会阻止按下UIBarbutton项目

[_popOver setPassthroughViews:nil]; 

之前UIBarButtonItems仍然能够同时显示弹出了被按下。我意识到我可以禁用按钮,但我宁愿不必这样做,因为在每种弹出窗口都打开时,我必须引入各种不必要的状态。在弹出窗口外部选择任何内容(包括其他UIBarButtonItems)时,是否有任何方法可以解除弹出窗口?

Basic代码瑞普问题:

- (IBAction)rightButtonPressed:(id)sender { 
    UIViewController *vc = [[UIViewController alloc] init]; 
    _popOver = [[UIPopoverController alloc] initWithContentViewController:vc]; 
    [_popOver setPassthroughViews:nil]; 
    [_popOver presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
} 

- (IBAction)leftButtonPressed:(id)sender { 
    NSLog(@"Why am I active while pop-over is visible?"); 
} 

两个栏按钮项添加到同一个导航栏。

回答

1

我是个白痴,想通了这个解决方案。看起来呼叫presentPopoverFromBarButtonItem自动将导航栏添加到passthroughviews。由于我在提出UIPopoverView之前而不是之后清理出来,因此它被加回。通话顺序的简单改变可以解决问题。

- (IBAction)rightButtonPressed:(id)sender { 
    UIViewController *vc = [[UIViewController alloc] init]; 
    _popOver = [[UIPopoverController alloc] initWithContentViewController:vc]; 
    [_popOver presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

    //Call this *AFTER* presenting the popover 
    [_popOver setPassthroughViews:nil]; 
}