Как отклонить UIPopoverControllers, на которые у меня нет ссылки? - PullRequest
2 голосов
/ 07 марта 2011

У меня есть несколько кнопок BarButton на моей панели инструментов, и я хочу показать разные UIPopoverController для каждого из них. Когда я щелкаю по одному из них, другие PopoverController должны быть отклонены (то есть только один popoverController показан на экране). Я не хочу хранить ссылки на них - потому что это слишком раздражает. Есть ли другой способ уволить их?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 07 марта 2011

Мне не известна функция «отклонить все всплывающие окна».

Но чтобы решить эту проблему, вам не нужно хранить ссылки на все ваши различные поп-версии; сохранить только ссылку на текущий показ поповера. Затем, когда запускается новый popover, вы можете отменить показ текущего popover (если он не равен nil). Затем назначьте «текущий показ поповера» новому отображаемому поповеру.

1 голос
/ 04 февраля 2013

Использование автоматизированной среды тестирования 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 за подсказки

0 голосов
/ 07 марта 2011

Согласно документу для разработчиков от здесь Нажатие за пределы содержимого всплывающего окна автоматически отклоняет всплывающее окно.но вы можете использовать этот метод dismissPopoverAnimated, чтобы программно отклонить всплывающее окно в ответ на нажатие внутри всплывающего окна. Как, например, вы можете отклонить его в didFinishPickingMediaWithInfo делегате UIImagePickerController

Надеюсь, вы его получите... Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...