如何响应从xib加载的自定义视图中发生的操作?

时间:2016-02-21 00:26:22

标签: ios swift xib

我按照this answer中的说明创建了一个使用xib布局的可重用自定义UIView,我可以通过引用自定义类将其嵌入到我的Storyboard中。这很好用,我可以像宣传的那样成功加载视图。但是我希望我的嵌入视图控制器能够连接到我的嵌入视图的IBActions。在链接的示例中,自定义视图接收自己的操作,但这似乎是糟糕的设计。我通过创建一个委托协议来解决这个问题,该协议用于自定义视图,它将事件转发给它的委托,但这感觉就像需要更多的工作。此外,Interface Builder不允许我使用UI中的引用来连接委托,因此我必须以编程方式进行委托。

我真正想要的是在我的自定义视图中创建自定义IB动作,例如someActionHappened,然后在嵌入视图控制器中连接它。实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

  • .xib 文件有一个文件所有者,您可以在编辑时查看并选择该文件。

  • 加载笔尖时,您需要指定owner

您可以(并且必须)制作这两件事的类(笔尖中的文件所有者和加载时的实际所有者)匹配。

因此,动作可以从笔尖中的某些东西挂钩到文件所有者类中的IBAction,并且当加载笔尖时它将被实现。问题解决了。

所以:

  

但是我希望我的嵌入视图控制器能够连接到嵌入视图的IBActions

因此,您的解决方案是使您的文件所有者(在您的笔尖中)和实际的owner(在笔尖加载时)成为您的嵌入视图控制器。现在,您的嵌入视图控制器可以拥有IBAction,您可以在笔尖中连接它。