gpt4 book ai didi

ios - 不调用委托(delegate)方法 (transitioningDelegate)

转载 作者:IT王子 更新时间:2023-10-29 05:41:52 25 4
gpt4 key购买 nike

我正在尝试在两个 viewController 之间实现自定义转换。 ( swift 3.0)

在我的两个 viewController 之间,我有一个 UISegue,类型为 show (animated = true)。

所以我在我的第一个 View Controller 的扩展中设置了 UIViewControllerTransitioningDelegate 的委托(delegate)方法:

extension DocumentsViewController : UIViewControllerTransitioningDelegate { ... }

而且我还实现了协议(protocol)要求的方法:

animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
...
}

public func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
...
}

现在,当执行 segue 时,在 firstViewController 中,我使用委托(delegate)方法 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
}
}

我检查了断点,委托(delegate)已正确设置到我的 firstViewController。但是我的 firstViewController 中 transitioningDelegate 的委托(delegate)方法从未被触发,我不知道为什么。

有什么想法吗?

PS:在我的 Storyboard中,我的 segue 已设置为 true,所以这应该可以,但没有。

谢谢。

已解决:混合了 MadreDeDios、Matt 和 Tushar 的答案。

1 : 因为我想在我的应用程序中保留导航,所以我必须让我的第一个 viewController 符合 UINavigationControllerDelegate 而不是 UIViewControllerTransitioningDelegate . (参见 MadreDeDios 的回答)。

2 : 根据这个协议(protocol),我实现了以下委托(delegate)方法:

public func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {

...

}

3 : 我之前在 firstViewControllerviewDidLoad() 中设置了委托(delegate)(参见 Matt 的回答 ):

override public func viewDidLoad() {
super.viewDidLoad()
//...
self.navigationController?.delegate = self
}

4 : 我正在使用手动推送而不是 segue 来显示我的secondViewController(参见Tushar 的回答 ).

现在可以了,谢谢。

最佳答案

问题是您设置 transitioningDelegate 的时间太晚了。 太晚了。它需要在 View Controller 的生命周期非常的早期设置。我建议在 View Controller 的初始化器中设置这个属性。

关于ios - 不调用委托(delegate)方法 (transitioningDelegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39876279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com