如何响应从 xib 加载的自定义视图中发生的操作?
Posted
技术标签:
【中文标题】如何响应从 xib 加载的自定义视图中发生的操作?【英文标题】:How do I respond to actions happening in a custom view loaded from xib? 【发布时间】:2016-02-21 00:26:22 【问题描述】:我已按照this answer 中的说明创建了一个可重用的自定义 UIView,该 UIView 使用 xib 布局,我可以通过引用自定义类将其嵌入到我的 Storyboard 中。这很好用,我可以成功加载广告中的视图。但是我希望我的嵌入视图控制器能够连接到我的嵌入视图的 IBActions。在链接的示例中,自定义视图接收自己的操作,但这似乎是糟糕的设计。我已经通过创建一个用于自定义视图的委托协议来解决这个问题,该协议将事件转发给它的委托,但这感觉比应该做的工作更多。此外,Interface Builder 不允许我使用 UI 中的引用连接委托,因此我必须以编程方式进行。
我真正想要的是在我的自定义视图中创建一个自定义 IB 操作,例如 someActionHappened
,然后将其连接到嵌入视图控制器中。实现这一目标的最佳方法是什么?
【问题讨论】:
Delegate 似乎是一个不错的解决方案。 【参考方案1】:.xib 文件有一个文件所有者,您可以在编辑它时看到并选择它。
加载笔尖时,您可以指定owner
。
您可以(并且必须)使这两个东西的类(nib 中的文件所有者和加载时的实际所有者)匹配。
因此,一个动作可以从 nib 中的某物挂钩到 File's Owner 类中的 IBAction,并在 nib 加载时执行。问题解决了。
所以:
但是我希望我的嵌入视图控制器能够连接到我的嵌入视图的 IBActions
因此,您的解决方案是让您的文件所有者(在您的笔尖中)和实际的 owner
(在笔尖加载时)成为您的嵌入视图控制器。现在你的嵌入视图控制器被允许有一个 IBAction 并且你可以在 nib 中连接到它。
【讨论】:
如果你想让它与多个视图控制器类一起工作,你可能需要多玩一些协议或超类,但绝对可以做到。以上是关于如何响应从 xib 加载的自定义视图中发生的操作?的主要内容,如果未能解决你的问题,请参考以下文章
在从 XIB 加载的自定义视图中修改 UIButton 的标题标签