Использование автоматизированной среды тестирования KIF натолкнуло меня на мысль посмотреть их функцию dismissPopovers.
Я немного изменил эту функцию, чтобы вы могли действительно использовать глобальную функцию dismiss all 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 за подсказки