Делегат UIPopoverController не получает приглашение на увольнение
Я назначаю объект popover o contentViewController, и я помещаю код отклонения в кнопку, которая находится в контроллере представления содержимого.
При нажатии кнопки:
[self.popover dismissPopoverAnimated:YES];
вызывается и popover отклоняется.
Однако метод делегата не вызывается автоматически. Я думал, что я не назначаю его делегатом, но он есть. Если я добавлю следующую строку после строки offsetPopoverAnimated, делегат будет вызван правильно...
[self.popover.delegate popoverControllerDidDismissPopover:self.popover];
Я не понимаю, почему он не "автоматически" вызывает метод делегата.
Как это может случиться?
Ответы
Ответ 1
popoverControllerDidDismissPopover:
в делегате не вызывается, когда используется 'rejectPopoverAnimated:'.
Из Apple Documentation для popoverControllerDidDismissPopover:
в UIPopoverControllerDelegate
:
Контроллер popover не вызывает этот метод в ответ на программные вызовы методу rejectPopoverAnimated:. Если вы программно отклоняете popover, вы должны выполнить любые действия по очистке сразу после вызова метода rejectPopoverAnimated:.
Ответ 2
Есть два способа отклонить popover. (а) выстукивание снаружи попперса; и (б) делать это программно с помощью
[self.popover dismissPopoverAnimated:YES];
Если вы делаете это программно, то документы (https://developer.apple.com/library/ios/documentation/uikit/reference/UIPopoverControllerDelegate_protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIPopoverControllerDelegate/popoverControllerDidDismissPopover:) говорят:
Контроллер popover не вызывает этот метод в ответ на программные вызовы метода rejectPopoverAnimated:. если ты отпустите программу popware программно, вы должны выполнить любую очистку действия сразу после вызова метода rejectPopoverAnimated:.
Таким образом, не вызывать делегат автоматически - это нормальное поведение, и то, что вы делаете (называя его самостоятельно), прекрасно.
Ответ 3
popoverControllerDidDismissPopover не вызывается на Dismiss, но его вызывается, когда вы выходите за пределы содержимого popoverController contentview.
https://developer.apple.com/library/ios/documentation/uikit/reference/UIPopoverControllerDelegate_protocol/Reference/Reference.html#jumpTo_4