在Storyboard中使用的UIGestureRecognizer能够用于多个视图吗?

4
我创建了许多视图和按钮,然后我以图形方式创建了ISwipeGestureRecognizer。并将许多视图添加到识别器的“引用出口集合”中。滑动手势适用于我所有的视图。这是怎么可能的?Storyboard自动为每个连接的UIView创建不同的SwipeRecognizers吗? 我无法通过编程方式添加更多视图,为什么?
3个回答

2
我从未尝试过你所描述的Storyboard方法,因此无法直接回答,但我可以建议一种验证是否创建了多个手势识别器的方法:在您的手势动作方法中,添加一个NSLog语句来记录识别器的地址(这是传递给动作方法的第一个参数)。通过这种方式,您将验证是否重用了相同的识别器。
此外,记录recognizer.view属性以查看内部发生了什么。如果您对所有情况都得到相同的结果,则可以乐观地推断出UISwipeRecognizer没有在内部使用其view属性,而且该信息仅存储为您的操作回调函数能够访问它。
神秘的是,您只获得一个手势识别器和不同的view属性值。这将意味着属性值是动态更改的,但我无法解释如何实现。

我刚刚尝试了这个解决方案。实际上,有多个识别器而不是单个。谢谢你。 - k06a
不客气!我之前并不知道Storyboard有这个功能,现在知道了,真是太好了... - sergio

2
您可以在Interface Builder中将手势识别器连接到多个视图上。当它们被触摸时,它们都会发送适当的消息。然而,使用识别器的view属性无法检测到触摸了哪个视图。无论触摸哪个视图,它始终指向同一个视图。
我不认为您可以在代码中实现相同的功能。是的,这很奇怪。
所以只要您不关心哪个视图触发了触摸,一切都很好。

0

您可以在代码或使用界面构建器中,将单个手势识别器添加到任意数量的视图中。要实现此操作,您需要使用UIViewaddGestureRecognizer:方法。请注意,您需要将识别器添加到视图中,而不是相反。


你可能想要尝试一下。识别器有一个view属性是有原因的,就像视图有一个superview属性一样(注意这些单词不是复数形式)。 - Filip Radelic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接