从 UIView 的子视图获取 UINavController?

Posted

技术标签:

【中文标题】从 UIView 的子视图获取 UINavController?【英文标题】:Get UINavController from subview of UIView? 【发布时间】:2011-05-04 23:03:26 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

您不应该需要从视图中引用视图控制器,当然也不应该在其中一个视图中保留视图控制器 - 否则最终会导致保留循环和内存泄漏。

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

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

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

使用通知:在这种特殊情况下不太常见,但您也可以让视图控制器监听视图发送的通知。

【讨论】:

即使设计是固定的,找到从视图到视图控制器的映射也会很有趣。我们都知道它就在那里,隐藏在一些私有 API 中,等待被滥用......

以上是关于从 UIView 的子视图获取 UINavController?的主要内容,如果未能解决你的问题,请参考以下文章

在 UIScrollview 中获取 UIView 的子视图

为啥从自定义 UIView 向 UIButton 添加子视图不显示添加的子视图?

UIView 的子视图在边界外渲染

为“幻灯片”iOS UIView 设置动画,但关联的子视图不移动

在主视图控制器的子容器视图中获取tableView的引用

如何获取 UIView 中特定子视图的计数?