gpt4 book ai didi

ios - 无法以编程方式设置 UINavigationControllerDelegate(但可以通过 Storyboard设置)

转载 作者:行者123 更新时间:2023-11-28 16:03:52 25 4
gpt4 key购买 nike

(XCode 8.1,Swift 3。github 中的示例 https://github.com/SuperTango/UINavigationControllerNoNavbar 在“byhand”和“storyboard”标签下)

我可以通过完全按照页面 http://blog.rinatkhanov.me/ios/transitions.html 中的说明在 Storyboard中设置 UINavigationControllerDelegate 来设置它.这是一张图片:

http://blog.rinatkhanov.me/assets/posts/transitions/delegate.png

这是我的照片:

enter image description here

效果很好。

但是,如果我不在 Storyboard中设置委托(delegate),而是尝试以编程方式分配相同的委托(delegate),则不会调用委托(delegate)方法。

    let delegate = JamNavigationControllerDelegate()
NSLog(String(describing: delegate))
navViewController.delegate = delegate
navViewController.pushViewController(view3ViewController, animated: false)
// and all subsequent push/pops don't use the delegate.

我在 github 上放了一个测试仓库 https://github.com/SuperTango/UINavigationControllerNoNavbar .有两个标签“byhand”和“storyboard”,应该是不言自明的。

有什么想法吗?

最佳答案

navViewController.delegate 是一个弱变量。这意味着其他一些对象必须保持对委托(delegate)的强引用,以便它保持事件状态。在您的代码片段中, delegate 仅保留到该片段的末尾(我猜这是一种方法)。代码段一结束,delegate var 就会超出范围。 navViewController 是唯一引用该变量的其他对象,但它是一个 引用,这意味着它不会增加保留计数。因此保留计数将为 0,对象将被释放,navViewController.delegate 将为 nil。您需要向 View Controller 添加一个属性以保持对 JamNavigationControllerDelegate 的强引用,或者使 View Controller 本身成为委托(delegate)。

关于ios - 无法以编程方式设置 UINavigationControllerDelegate(但可以通过 Storyboard设置),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40594884/

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