我的工具栏中有很多BarButton,我想为每个BarButtons显示不同的UIPopoverController。当我点击其中一个时,应该关闭其他PopoverControllers(即屏幕上只显示一个popovercontroller)。我不想继续引用它们 - 因为这太烦人了。还有另一种方法可以解雇他们吗?
感谢。
答案 0 :(得分:2)
我知道没有“解雇所有弹出窗口”的功能。
但要解决这个问题,你不必继续引用所有不同的popovers;仅保留对当前显示的弹出窗口的引用。然后,当启动新的弹出窗口时,您可以忽略当前显示弹出窗口(如果它不是nil)。然后将“当前显示弹出窗口”分配给您显示的新弹出窗口。
答案 1 :(得分:1)
使用自动化测试框架KIF让我想到了他们的dismissPopovers功能。
我稍微修改了这个函数,所以你真的可以使用全局解除所有popovers函数。 这是代码:
//dismiss popovers
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIView *currentPopover in [[windows objectAtIndex:0] subviewsWithClassNamePrefix:@"UIDimmingView"]) {
[currentPopover removeFromSuperview];
}
和UIViewExtension:
- (NSArray *)subviewsWithClassNamePrefix:(NSString *)prefix;
{
NSMutableArray *result = [NSMutableArray array];
// Breadth-first population of matching subviews
// First traverse the next level of subviews, adding matches.
for (UIView *view in self.subviews) {
if ([NSStringFromClass([view class]) hasPrefix:prefix]) {
[result addObject:view];
}
}
// Now traverse the subviews of the subviews, adding matches.
for (UIView *view in self.subviews) {
NSArray *matchingSubviews = [view subviewsWithClassNamePrefix:prefix];
[result addObjectsFromArray:matchingSubviews];
}
return result;
}
感谢KIF提示
答案 2 :(得分:0)
根据来自 here 的开发者文档,弹出窗口内容之外的选项会自动关闭弹出窗口。但是您可以使用此方法dismissPopoverAnimated
以编程方式关闭弹出框以响应弹出窗口内的点击。例如,您可以在didFinishPickingMediaWithInfo
UIImagePickerController
希望你明白......祝你好运!