Я использую оболочку контроллера вида для управления набором контроллеров дочерних представлений, которые должны иметь возможность представить другие контроллеры представлений в обычае.Использование definePresentationContext с UIModalPresentationStyle.custom
Я столкнулся с проблемой, где definesPresentationContext
свойство не используется когда Предъявление из контроллера представления с использованием UIModalPresentationStyle.custom
В качестве примера, у меня есть три контроллера вида: ROOT
, A
и B
ROOT
|_ A
A
является ребенком ROOT
. Я хотел бы представить B
от A
при использовании пользовательских UIPresentationController
, UIViewControllerTransitioningDelegate
и UIViewControllerAnimatedTransitioning
.
Так что я следующий внутри кода для контроллера A
(контроллер примечание A
имеет definesPresentationContext
набор для true
):
func buttonPressed(_ sender: Any?) {
let presentationController = MyCustomPresentation()
let controllerToPresent = B()
controllerToPresent.modalTransitionStyle = .custom
controllerToPresent.transitioningDelegate = presentationController
present(controllerToPresent, animated: true, completion: nil)
}
Однако внутри моего контроллера представления (который также мой UIViewControllerAnimatedTransitioning
) Я столкнуться со следующими проблема:
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
let fromVC = transitionContext.viewController(forKey: .from)
let toVC = transitionContext.viewController(forKey: .to)
if let fromVC = fromVC as? A,
let toVC = toVC as? B {
//Do the presentation from A to B
}
}
в этой функции, где я ожидаю fromVC
быть типа A
, это на самом деле ROOT
. Несмотря на то, что A
указывает definesPresentationContext
.
Итак, я считаю, что это потому, что я использую UIModalPresentationStyle.custom
. Так что я изменить его UIModalPresentationStyle.overCurrentContext
Это приводит к IOS, чтобы правильно прочитать definesPresentationContext
свойство от A
, и моя animateTransition
функция Теперь вызывается с правильным из вида контроллера, но:
Поскольку мой модальный стиль презентации больше не не .custom
следующий метод в моем переходе делегата больше не вызывается
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController?
Так мой контроллер презентации становится неиспользованными.
Я хочу .custom
модальный стиль перехода, который уважает definesPresentationContext
. Это возможно? Я что-то упускаю?
В принципе, я хочу иметь специальную модальную презентацию в текущем контексте.
Вы пробовали установить переходный делегат также в 'A'? Перед этой строкой: 'present (controllerToPresent, animated: true, completion: nil)'. попробовать это: 'self.transitioningDelegate = presentationController' Я предлагаю это при использовании:' UIModalPresentationStyle.overCurrentContext' – zero