Уволить UIPopoverController изнутри его contentViewController? - PullRequest
26 голосов
/ 26 марта 2012

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

  1. Создать ссылку на всплывающее окно, которое будет удерживаться контроллером представления, который его создает.
  2. Создайте уведомление от contentViewController, чтобы сообщить владельцу контроллера представления, что он должен быть отклонен, или поочередно создайте делегата для той же цели
  3. Отправьте уведомление или сообщение делегата, когда всплывающее окноготов к отклонению
  4. Вызов dismissPopover:animated при вызове метода уведомления или делегата

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

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

Ответы [ 2 ]

29 голосов
/ 26 марта 2012

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

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

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

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

1 голос
/ 17 марта 2014

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

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

...