- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试在两个 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 : 我之前在 firstViewController
的 viewDidLoad()
中设置了委托(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/
在 Xcode beta 2 和 iOS 10 beta 2 之前,我有一个可用的自定义 UIPresentationController。我没有更改任何代码,但演示文稿现在以标准模式演示文稿呈现。
我正在尝试在两个 viewController 之间实现自定义转换。 ( swift 3.0) 在我的两个 viewController 之间,我有一个 UISegue,类型为 show (anima
我正在测试 View Controller 之间的一些自定义转换。像往常一样,我在 prepareForSegue: 方法中设置了转换协议(protocol)。一切都很好,直到我想知道我们是否可以在其
我使用自定义 UIPresentationController 来执行带有我自己的动画的续集。在 prepareForSegue: 中 myDestinationController.transiti
我是一名优秀的程序员,十分优秀!