我在UIViewController的内容视图中添加了自定义子视图。从该子视图中,我如何获得superview控制器的引用? 感谢
答案 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。
使用通知:在此特定情况下不太常见,但您也可以让视图控制器侦听视图发送的通知。