我尝试了无故事板的方法,并尝试了以下方法:
我创建了FooViewController.swift来管理我的FooView实例。我称之为创建FooViews如下:
init(){ super.init(nibName:" FooView",bundle:nil) }
我将FooView.xib的文件所有者设置为FooView类
当我的操作触发时,我收到运行时异常:"无法识别的选择器发送到实例"它引用了FooViewController(!)。我仔细检查了文件所有者和所有输出,所有引用看起来都是正确的。
它就像忽略事件调度的文件所有者一样。
(感觉就像我正在与框架作斗争,我真的希望在控制器内实现我的所有输出/操作,但从架构纯度的角度来看(为了增强测试)我倾向于隐藏xib控件细节并制作一个更不透明的视图,它没有直接将其内部控件暴露给控制器,而是有一个协议/委托类型的合同。)
我有一种偷偷摸摸的怀疑,如果我将所有xib加载逻辑移动到UIView实现中,事情会起作用,但这感觉就像是一次更大的冒险。有没有一种简单的方法来设置我的FooView子类来接收事件?
答案 0 :(得分:1)
您可以使用的另一件事是将First Responder设置为您的操作的目标。虽然您不会在XCode中获得IBAction连接的漂亮整洁指示器,但它会将消息传递给实现该方法的响应器链中的第一个类。
要在界面构建器中进行设置,请单击“第一响应者”并打开“属性”检查器。将您的方法添加到用户定义列表someAction:
(不要忘记冒号)。然后,您可以将按钮连接到第一个响应者,该方法将是一个可供您连接的选项。
最后,您要在要实现它的视图类中正常声明您的IBAction。