gpt4 book ai didi

ios - 如何设置@IBAction 来定位 UIView 子类

转载 作者:行者123 更新时间:2023-11-29 01:12:49 26 4
gpt4 key购买 nike

我正在尝试一种无 Storyboard 的方法,并尝试了以下操作:

  1. 我创建了一个 FooView.xib 来保存我的布局。它有一些按钮和标签。
  2. 我创建了一个 FooView.swift 来保存 UIView 的 FooView 子类。目前,它实际上并没有做任何事情。
  3. 我创建了 FooViewController.swift 来管理我的 FooView 实例。我调用它来创建 FooViews,如下所示:

    初始化(){ super.init(nibName: "FooView", bundle: nil)

  4. 我将 FooView.xib 的文件所有者设置为 FooView 类

  5. 我将 FooView View 的自定义类设置为 FooView
  6. 我将一些 @IBAction 输出从 IB 拖到 FooView 实现中

当我的操作触发时,我得到一个运行时异常:“无法识别的选择器发送到实例”,它引用了 FooViewController(!)。我仔细检查了文件所有者和所有输出,所有引用看起来都是正确的。

在事件调度方面,它的行为就像忽略文件所有者一样。

(感觉就像我在与框架作斗争,真的应该在 Controller 内实现我的所有输出/操作,但从架构纯度的角度来看(以增强测试)我倾向于隐藏 xib 控制细节并制作一个更不透明的 View ,它没有直接将其内部控件暴露给 Controller ,而是有一种协议(protocol)/委托(delegate)类型的契约(Contract)。)

我有一个偷偷摸摸的怀疑,如果我将所有 xib 加载逻辑移到 UIView 实现中,事情就会起作用,但这感觉像是一个更大的冒险。有没有一种简单的方法来设置我的 FooView 子类来接收事件?

最佳答案

您可以使用的另一件事是将第一响应者设置为您的操作目标。虽然您不会在 XCode 中获得 IBAction 已连接的简洁指示器,但它会将消息传递给实现该方法的响应者链中的第一个类。

要在界面构建器中进行设置,请单击“第一响应者”并打开“属性”检查器。将您的方法作为 someAction: 添加到“用户定义”列表中(不要忘记冒号)。然后,您可以将按钮连接到第一响应者,并且该方法将成为您连接它的可用选项。

最后,您像平常一样在要实现它的 View 类中声明 IBAction。

关于ios - 如何设置@IBAction 来定位 UIView 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35542453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com