【问题标题】:How do I respond to actions happening in a custom view loaded from xib?如何响应从 xib 加载的自定义视图中发生的操作?
【发布时间】:2016-02-21 00:26:22
【问题描述】:

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

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

【问题讨论】:

  • Delegate 似乎是一个不错的解决方案。

标签: ios swift xib


【解决方案1】:
  • .xib 文件有一个文件所有者,您可以在编辑它时看到并选择它。

  • 加载笔尖时,您可以指定owner

您可以(并且必须)使这两个东西的类(nib 中的文件所有者和加载时的实际所有者)匹配。

因此,一个动作可以从 nib 中的某物挂钩到 File's Owner 类中的 IBAction,并在 nib 加载时执行。问题解决了。

所以:

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

因此,您的解决方案是让您的文件所有者(在您的笔尖中)和实际的 owner(在笔尖加载时)成为您的嵌入视图控制器。现在你的嵌入视图控制器被允许有一个 IBAction 并且你可以在 nib 中连接到它。

【讨论】:

  • 如果你想让它与多个视图控制器类一起工作,你可能需要多玩一些协议或超类,但绝对可以做到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
相关资源
最近更新 更多