Я хочу представить контроллер вида с помощью пользовательских переходов. В то же время, я хочу убедиться, что когда он будет уволен, за ним заведует диспетчер представлений, который находится на переднем плане.Trigger viewWillAppear при использовании делегата с переходом
Моя основная идея - попробовать несколько разных конфигураций и посмотреть, какой из них приведет к выходу viewWillAppear
на контроллер вида.
Покушение 1
presentedViewController.modalPresentationStyle = .Custom
presentedViewController.transitioningDelegate = someTransitioningDelegate
Это подход по умолчанию, а пользовательский переход отлично работает нормально, но я хочу viewWillAppear
называться на контроллере представления за presentedViewController
, когда я называю presentedViewController.dismissViewControllerAnimated(true)
(который не делает бывает). Так что я сделал это:
Покушение 2
presentedViewController.modalPresentationStyle = .FullScreen
presentedViewController.transitioningDelegate = someTransitioningDelegate
или
presentedViewController.modalPresentationStyle = .FullScreen
presentedViewController.modalTransitionStyle = .CoverVertical
presentedViewController.transitioningDelegate = someTransitioningDelegate
Теперь viewWillAppear
вызывается на контроллере представления позади presentedViewController
при отклонении presentedViewController
, и происходит переход, как ожидается, когда представляя контроллер вида.
Однако, когда отклоняя контроллер представления, фон во время перехода черный; кажется, что .FullScreen
заставляет диспетчеры представлений за presentedViewController
быть удалены из иерархии представлений - это хорошо, потому что предположительно это то, что вызывает вызов viewWillAppear
.
Покушение 3
presentedViewController.modalPresentationStyle = .FullScreen
presentedViewController.modalTransitionStyle = .CoverVertical
Интересно, что если .CoverVertical
указано, но transitioningDelegate
нет, то фон во время перехода на самом деле находится контроллер вид сзади presentedViewController
, но viewWillAppear
вызывается на контроллер просмотра позади presentedViewController
в любом случае. Единственное, чего не хватает, - это настраиваемый переход.
Проект Я работаю на структурирована таким образом, что делает его трудно использовать делегирование (который, кажется, предложенный ответ here).Используя NSNotificationCenter
еще одна альтернатива, которая позволяет мне назвать код, который должен быть вызван viewWillAppear
, но от попытки 3, я надеюсь, что есть более элегантный подход к достижению всех этих:
- Trigger
viewWillAppear
- Используйте выборочный переход
- См-контроллер был представлен в фоновом режиме во время перехода анимации