我正在创建一个包含一些UIBarButton项的应用程序,其中一些项在按下时会启动UIPopoverController。我希望此操作禁止任何东西与之进行交互,这通常是默认情况下发生的。但是,我注意到,当弹出框处于 Activity 状态时,同一工具栏中的其他UIBarButtonItem仍将处于 Activity 状态。我尝试添加:
[_popOver setPassthroughViews:nil];
在显示它之前,但是在显示弹出窗口时仍可以按下UIBarButtonItems。我意识到我可以禁用按钮,但是我宁愿不必这样做,因为在每种弹出窗口打开时,我必须引入各种不必要的状态。当在弹出窗口之外选择任何东西(包括其他UIBarButtonItems)时,有什么方法可以关闭弹出窗口?
重现问题的基本代码:
- (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?");
}
将两个按钮按钮项都添加到同一导航栏中。
最佳答案
我是个白痴,在发布了这篇文章之后就想出了解决方法。似乎对presentPopoverFromBarButtonItem
的调用会自动将导航栏添加到passthroughviews中。由于我在展示UIPopoverView
之前而不是之后进行清理,因此将其添加回来。简单更改 call 顺序即可解决此问题。
- (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];
}