Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将事件处理程序连接到自定义UIView组件_Ios_Swift_Uiview - Fatal编程技术网

Ios 将事件处理程序连接到自定义UIView组件

Ios 将事件处理程序连接到自定义UIView组件,ios,swift,uiview,Ios,Swift,Uiview,我有一个名为ControlsDockView的自定义UIView组件,视图中有几个按钮。我知道您可以将按钮的单击事件直接添加到UIViewController并继续。但是我是否可以将事件处理程序添加到ControlsDockView?如果是,怎么做 对于android,我知道我们可以直接在视图中编写事件处理程序,但与swift不同吗 我是否必须通过视图控制器才能看到它?也许这是一个新手问题,但我需要知道我如何才能继续这个问题 提前感谢您的帮助是的。可以在自定义视图中为按钮创建操作。最简单的方法可

我有一个名为ControlsDockView的自定义UIView组件,视图中有几个按钮。我知道您可以将按钮的单击事件直接添加到UIViewController并继续。但是我是否可以将事件处理程序添加到ControlsDockView?如果是,怎么做

对于android,我知道我们可以直接在视图中编写事件处理程序,但与swift不同吗

我是否必须通过视图控制器才能看到它?也许这是一个新手问题,但我需要知道我如何才能继续这个问题


提前感谢您的帮助

是的。可以在自定义视图中为按钮创建操作。最简单的方法可能是按ctrl键从interface builder拖动到视图代码中

然后,您将在视图代码中获得一个
iAction func actionHandler(发送方:UIButton){}

另一种设置方法是将操作添加到自定义视图中loadFromNib方法或构造函数中的按钮


但是,在这些操作中添加任何与视图没有直接关系的逻辑时要小心,因为以这种方式向视图添加业务逻辑被认为是一种非常糟糕的编码实践

我刚刚尝试过这个,显然您需要从ViewController继承,才能在自定义视图上使用iAction。ctrl-drag功能只有在此时才起作用。还有其他方法吗?没有。UIView在处理这些方面没有问题。您是否在xib中设置了自定义类,以便xcode知道如何将xib映射到实际的类?显然,我的方法是错误的。我的问题是,我直接在viewcontroller中创建视图,而与xib无关。那是我做的错误的事情。你的解释是对的。非常感谢Moriyao,这个想法是实现某种中央事件总线,它将包含一种生产者-消费者算法,这就是为什么我需要从视图向全局事件总线发送事件的机制