Я пытаюсь реализовать пользовательский переход между двумя viewControllers. (Swift 3,0)Делегированные методы не называются (transitioningDelegate)
Между двумя моими viewControllers У меня есть UISegue
с видом show
(animated = true
).
Так я поставил методы делегата от UIViewControllerTransitioningDelegate
в расширении моего первого контроллера представления:
extension DocumentsViewController : UIViewControllerTransitioningDelegate { ... }
И я также реализованы необходимые методы, с помощью протокола:
animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
...
}
public func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
...
}
Теперь, когда segue
выполняет, в firstViewController
Я использую метод делегата prepareForSegue
, чтобы окончательно установить transitioningDelegate
на мой `secondViewController, см. Ниже:
public override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
if let destination = segue.destination as? DocumentDetailViewController {
destination.transitioningDelegate = self
}
}
Я проверяю с помощью контрольных точек, делегат хорошо настроен на мой firstViewController. Но методы делегата transitioningDelegate
в моем первом контролере просмотра никогда не запускаются, я не знаю почему.
Любые идеи?
PS: В моей раскадровке, мой segue have Animated to true
, так что это должно работать, но это не так.
Спасибо.
SOLVED: Смесь MadreDeDios, Matt и Tushar отвечает.
1: Как я хочу, чтобы сохранить навигации в моем приложении, я должен сделать соответствовать моему первому ViewController к UINavigationControllerDelegate
вместо UIViewControllerTransitioningDelegate
. (см. MadreDeDios ответ).
2: Согласно этому протоколу, я реализовал следующий метод делегата:
public func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
...
}
3: я установить делегат ранее на viewDidLoad()
моего firstViewController
(см ответ Мэтта) :
override public func viewDidLoad() {
super.viewDidLoad()
//...
self.navigationController?.delegate = self
}
4: Я используя ручной нажим вместо segue для отображения моего secondViewController
(см. Ответ Тушара).
Теперь это работает, спасибо.
Вы забыли: destination.modalPresentationStyle = .custom?. и реализовать функцию: presentationController (forPresented представлен: UIViewController, представляющий: UIViewController ?, источник: UIViewController) -> UIPresentationController? – dellos