为UIGestureRecognizer选择器操作传递参数

时间:2014-08-10 13:25:40

标签: ios swift ios8 xcode6

我知道(并且在SO上发现了几个帖子),一个人无法传递选择器的任何其他参数。例如,每当有人点击我的图像视图时,我就会发生以下情况:

 imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action:Selector("tapImage:")))

这是正常的,许多解决方案说如果你想传递一个参数,只需将视图的标签分配给某个东西,然后在tapImage函数中引用它作为发送者。事情是我实际上使用标签值来做其他事情,所以需要以某种方式在其他地方存储另一个值。

我可以将一些真/假(或0/1)值传递给我的TapGestureRecognizer操作" tapImage"这样我可以评估一个表达式?我还需要传递一组类。

我认为唯一的解决方案是在这种情况下使用不同的选择器(例如" tapImageFunctionA" vs." tapImageFunctionB"这很好,但在我走这条路线之前就有了另一种方式?即使这样,我也需要访问一组对象。也许我在视图控制器中设置一个全局变量并以这种方式访问​​它?

非常感谢!

1 个答案:

答案 0 :(得分:0)

  1. 使用一些标记格式 - 例如位掩码,例如16种低位用于一种信息/ 16位高位用于第二种信息
  2. 使用associative references。这里有关于堆栈溢出的一些答案:How do I use objc_setAssociatedObject/objc_getAssociatedObject inside an object?Any gotchas with objc_setAssociatedObject and objc_getAssociatedObject?
  3. 我个人会使用带标签的第一个解决方案,以减少关联引用的性能开销(它非常小,但它存在)。此外,标签似乎更多"编程"解决方案,当关联引用时 - 更依赖于技术和实现。