从UIView的子视图获取UINavController?

时间:2011-05-04 23:03:26

标签: objective-c cocoa-touch ios uiviewcontroller uinavigationcontroller

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

1 个答案:

答案 0 :(得分:5)

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

您不需要从视图中引用视图控制器,并且您当然不应该在您的一个视图中保留视图控制器 - 或者您最终会得到一个保留循环和泄漏内存。

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

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

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

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