[英]How to set up @IBAction to target a UIView subclass
我正在尝试一种无故事板的方法,并尝试了以下操作:
我创建了FooViewController.swift来管理我的FooView实例。 我称其为创建FooViews如下:
init(){super.init(nibName:“ FooView”,bundle:nil)}
我将FooView.xib的文件所有者设置为FooView类
当我的动作触发时,我得到一个运行时异常:“无法识别的选择器发送到实例”,该异常引用了FooViewController(!)。 我仔细检查了文件所有者和所有输出,所有引用看起来正确。
就像在事件分发方面忽略文件所有者一样。
(感觉就像我在与框架作斗争,确实希望在控制器内部实现我的所有输出/动作,但是从架构纯净度的角度(为了增强测试),我倾向于隐藏xib控件的细节并使之更加不透明。不会直接向控制器公开其内部控件的视图,而是具有协议/委托类型的合同。)
我有一个偷偷摸摸的怀疑,如果我将所有xib-loading逻辑移到UIView实现中,一切都会奏效,但这听起来像是一次更大的冒险。 有没有简单的方法来设置FooView子类以接收事件?
您可以使用的另一种方法是将“第一响应者”设置为操作目标。 尽管您不会在IBAction所连接的XCode中获得漂亮的整洁指示符,但它会将消息传递给实现该方法的响应者链中的第一类。
要在界面构建器中进行设置,请单击“第一响应者”并打开“属性”检查器。 将方法作为someAction:
添加到“用户定义”列表中(不要忘记冒号)。 然后,您可以将按钮连接到第一响应者,该方法将是您连接按钮的可用选项。
最后,像您在要实现它的视图类中一样,声明IBAction。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.