Отключение UIPopoverController с -dismissPopoverAnimated: не вызовет делегата?

У меня есть UIPopoverController с собой как делегат: Я получаю вызовы, когда я выхожу за пределы контроллера popover, но когда я нажимаю внутрь, я тоже хочу уволить, поэтому я использую -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];

Ответы

Ответ 1

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

Цитирование Документов Apple на popoverControllerDidDismissPopover::

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

Ответ 2

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

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

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

Надеюсь, что это поможет

Приветствия Аль

Ответ 3

сначала установите делегат;

yourPopup.delegate = я;

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

[self.yourPopUp упущениеПопулярность: YES];