Увольнение UIPopoverController с -dismissPopoverAnimated: не будет вызывать делегат? - PullRequest
14 голосов
/ 25 августа 2010

У меня есть UIPopoverController с самоотдачей в качестве делегата: Я получаю вызовы, когда касаюсь за пределами контроллера поповера, но когда я касаюсь внутри, я тоже хочу отклонить, поэтому я использую -dismissPopoverAnimated: но делегат не вызывается в этом случае. Это нормально? Это ошибка или я что-то не так делаю?

newDocPopoverController = [[UIPopoverController alloc] initWithContentViewController:vc];
[newDocPopoverController setPopoverContentSize:CGSizeMake(240, 44*4)];
[newDocPopoverController presentPopoverFromBarButtonItem:sender 
                permittedArrowDirections:UIPopoverArrowDirectionAny
                                                        animated:YES];
[newDocPopoverController setDelegate:self];

UPDATE:

О, независимо от причины возникновения проблемы (является ли это ошибкой или предполагаемым поведением), вызов делегата сам решает проблему :)

При касании представления contentViewController я вызываю родительский делегат UIPopoverController для вызова.

if ([parentPopoverController.delegate popoverControllerShouldDismissPopover:parentPopoverController]){
    [parentPopoverController dismissPopoverAnimated:YES];
    [parentPopoverController.delegate popoverControllerDidDismissPopover:parentPopoverController];
}r];

Ответы [ 3 ]

22 голосов
/ 11 января 2011

Программно popoverControllerDidDismissPopover не вызывается и не отклоняется, вам придется вызывать делегата самостоятельно:

[self.PopUp dismissPopoverAnimated:YES];
[self.PopUp.delegate popoverControllerDidDismissPopover:self.PopUp];

Где PopUp является родителем UIPopoverController

Hopeэто помогает

Ура Al

22 голосов
/ 25 августа 2010

Это нормальное, ожидаемое поведение.

Цитирование Apple docs на popoverControllerDidDismissPopover::

Контроллер всплывающих окон не вызывает этот метод в ответ напрограммные вызовы метода dismissPopoverAnimated:.Если вы закрыли поповер программно, вы должны выполнить любые действия по очистке сразу после вызова метода dismissPopoverAnimated:.

0 голосов
/ 03 апреля 2013

установить делегата первым;

yourPopup.delegate = я;

тогда где-то в вашем коде (может быть в вызове метода конкретного события из-за какого-то события). используйте следующий код:

[self.yourPopUp dismissPopoverAnimated: YES];

...