从 UIView 的子视图获取 UINavController?

发布于 2024-11-04 19:57:14 字数 70 浏览 0 评论 0原文

我向 UIViewController 的内容视图添加了一个自定义子视图。从该子视图中,如何获取对超级视图控制器的引用? 谢谢

I added a custom subview to a UIViewController's content view. From that subview, how can I get a reference to the superview's controller?
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

十年不长 2024-11-11 19:57:14

正确的答案是“你做错了™”;-)

你不应该需要从视图引用视图控制器,并且你当然不应该在你的视图之一中保留视图控制器 - 否则你'最终会出现保留循环并泄漏内存。

Cocoa 提供了多种模式来解决这个问题:

  • 使用委托: 定义一个名为 DemoViewDelegate 的协议,并向 DemoView 添加一个委托属性。然后让你的视图控制器实现这个协议。 重要提示:决不应该保留代表!您创建的任何委托属性都应设置为分配请参阅Apple 的委托文档 或只是谷歌“委托模式”。

  • 使用响应者链:调用 UIApplication 的 sendAction:to:from:forEvent: 并将 to: 设置为 nil< /code> 让您的操作消息自动沿着响应者链路由到您的视图控制器。请参阅 Apple 的 Responder 文档 和更详细的操作消息文档

  • 使用通知:在此特定场景中不太常见,但您也可以让视图控制器侦听视图发送的通知。

The correct answer is "You're Doing It Wrong™" ;-)

You shouldn't need to reference to a view controller from a view, and you certainly should never retain a view controller in one of your views -- or you'll end up with a retain loop and leak memory.

Cocoa provides multiple patterns to solve this problem:

  • Use a delegate: Define a protocol called DemoViewDelegate and add a delegate property to DemoView. Then have your view controller implement this protocol. Important: delegates should never be retained! Any delegate property you create should be set to assign. See Apple's Delegation docs or just google "delegation pattern".

  • Use the responder chain: Call UIApplication's sendAction:to:from:forEvent: and leave to: set to nil to have your action message automatically routed up the responder chain to your view controller. See Apple's Responder docs and the more detailed Action Messages docs.

  • Use a notification: Less common in this particular scenario, but you could also have your view controller listen for a notification, which the view sends.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文