在IB中,可以使用轻拍手势识别器来识别UILabel和/或UIImageView吗?

14
我有一个包含多个图片和标签的单个UIView的xib。如果我将Tap Gesture Recognizer拖到父视图上,它可以正常工作,但我需要添加代码来确定点击的位置,以便正确响应被点击的标签。
我认为如果我可以将Gesture Recognizers分别拖到每个标签和/或图像上,并将IBActions连接到每个标签和图像上,那么这会更容易一些。不幸的是,我无法使其正常工作。只能从父视图执行委托方法。
我所做的是将Tap Gesture Recognizer拖到标签上,然后将视图控制器作为TGR的委托进行了连接,并将IBAction方法连接到处理点击的方法。除了使用IBAction方法之外,我还尝试过在gestureRecognizerShouldBegin:gestureRecognizer委托方法中分配目标和动作方法,但没有成功。
这样做应该可以正常工作,还是我只是心存幻想?
感谢您的任何帮助。 John
1个回答

28

在UIImages和UILabels上,userInteractionEnabled默认设置为NO。你可以使用手势识别器来操作它们,但首先必须重置此属性。

在Interface Builder或Storyboard中,在标签或图像上勾选userInteractionEnabled复选框即可。

或者,在代码中,只需按照以下方式操作(Objective-C):

myLabel.userInteractionEnabled = YES;
myImage.userInteractionEnabled = YES;

(Swift):

(斯威夫特语言)
myLabel.userInteractionEnabled = true
myImage.userInteractionEnabled = true

有趣的是,在IB中勾选标签框可以生效,但对于图像,我唯一能让它生效的方法是在代码中实现。 - user278859
1
我想我弄清楚了差异的原因。如果您为多个对象使用相同的IBAction并检查两者的userInteractionEnabled复选框,则只有第一个被选中的似乎有效。第二个或两个都必须在代码中完成。 - user278859
1
很高兴你解决了它。关于IBAction影响userInteractionEnabled复选框的那种情况很奇怪,也许还有其他问题。但是,我从未找到Interface Builder中的所有小毛病。 - salo.dm
非常感谢您!我已经把头发都拔光了,结果解决方案却如此简单。 - Scooter
1
值得一提的是,在Xcode 7的界面构建器中,有两个名为“用户交互启用”的复选框。一个位于Identity Inspector(图标看起来像身份证),另一个位于Attributes Inspector(图标是五边形并看起来像滑块)。你需要勾选的是Attributes Inspector中的那个。 - erikprice
从故事板 - 属性检查器中做得更好,勾选用户交互启用.. 无需编码! - KawaiKx

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