Подтвердить что ты не робот

Отключение UIPopoverController изнутри своего ContentViewController?

Если вы хотите отклонить popover - например, с помощью кнопки в popover contentViewController вы должны -

  • Создайте ссылку на popover, которая будет храниться контроллером вида, который создает его.
  • Создайте уведомление от ContentViewController, чтобы позволить владельцу контроллера представления знать, что его следует отклонить, или поочередно создать делегат для той же цели
  • Отправлять уведомление или делегировать сообщение, когда popover готов к увольнению.
  • Вызов dismissPopover:animated при вызове метода уведомления или делегата

Между тем, из UIViewController вы можете получить доступ к контроллеру модального представления, контроллеру родительского представления, контроллеру навигации, контроллеру разделенного вида, контроллеру панели вкладок, контроллеру отображения поиска, контроллерам дочерних элементов, представлению представления контроллеров и представленных контроллеров представлений.

Есть ли лучший способ сделать это из popover contentViewController?

4b9b3361

Ответ 1

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

Я был удивлен, как UIViewControllers могут получить доступ к модульному контроллеру просмотра, контроллеру родительского представления, контроллеру навигации, контроллеру разделенного вида, контроллеру панели вкладок, контроллеру отображения поиска, а с iOS 5 - контроллерам детского вида, а также представить и представить контроллеры... но не контроллер popover (предоставленные popovers не UIViewController, но все же).

Технически существует частный недокументированный метод для получения popoverController, в котором находится UIViewController... Я понятия не имею, почему они никогда не публиковали его, поскольку он должен быть точно таким же, как любой из вышеперечисленных контроллеров.

Хотя даже в закрытом, недокументированном мире нет эквивалента dismissModalViewcontrollerAnimated:. Вам все равно придется получить эту ссылку, а затем отпустите ее таким образом.

Ответ 2

Другим способом решения этого вопроса является создание абстрактного контроллера представлений (для всех ваших контроллеров представлений), который добавляет наблюдателя NSNotification к методу, например -(void)closePopoverIfNecessary:(NSNotification*)notification, и имеет дочерние классы, которые необязательно реализуют метод для закрытия своего popover ( s) если открыто. Затем изнутри контроллера popover вы запускаете уведомление, чтобы закрыть его. Вы также можете передать другую информацию через уведомление (userInfo), если это необходимо.

Таким образом, нет необходимости в родительских ссылках.