从UIView的子视图获取UINavController?

我在UIViewController的内容视图中添加了一个自定义子视图。 从该子视图中,我如何获得superview控制器的引用? 谢谢

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

您不需要从视图中引用视图控制器,并且您当然不应该在其中一个视图中保留视图控制器 – 否则您将最终得到保留循环和泄漏内存。

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

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

  • 使用响应程序链:调用UIApplication的sendAction:to:from:forEvent:并保留to:设置为nil ,让您的操作消息自动将响应程序链路由到视图控制器。 请参阅Apple的Responder文档和更详细的Action Messages文档 。

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