将点击手势添加到插座集合
Posted
技术标签:
【中文标题】将点击手势添加到插座集合【英文标题】:Adding tap gesture to outlet collection 【发布时间】:2018-08-12 23:08:35 【问题描述】:将UITapGestureRecognizer
添加到我的UILabel
。我为 UILabels
创建了一个 outlet collection
,我想将点击事件添加到其中。这是我的代码:
Outlet Collection Name = viewLabels
let removeLabelTapGesture = UITapGestureRecognizer(target: self, action: #selector(removeTagLabel(_:)))
for label in (0..<viewLabels.count)
viewLabels[label].addGestureRecognizer(removeLabelTapGesture)
@objc func removeTagLabel(_ sender: UITapGestureRecognizer)
print ("inside removeTagLabel")
我正在遍历我的插座集合并将gesture recognizer
添加到每个UILabel
。控制台中没有打印任何内容。
几个小时后,我想尝试将gesture recognizer
单独添加到每个UILabel
。
viewLabels[0].addGestureRecognizer(removeLabelTapGesture)
现在这适用于UILabels
之一。按照这种方法,如果我单独执行,它会将gesture event
添加到我添加事件的最后一个UILabel
。
viewLabels[0].addGestureRecognizer(removeLabelTapGesture)
.
.
.
viewLabels[x].addGestureRecognizer(removeLabelTapGesture) //Will add gesture event to this UILabel
有没有办法将gesture recognizer
添加到我的每个UILabels
中?
【问题讨论】:
【参考方案1】:你的方法都不起作用。问题是您的代码试图将相同的点击手势识别器添加到所有标签。你不能那样做,就像你自己不能同时在纽约和伦敦一样。
【讨论】:
如果我有 3 个UILabels
我必须创建 3 个不同的 UITapGestureRecognizer
事件然后单独添加它们?即使每个点击事件都相同?
点击手势识别器不是一个事件,它是一个响应事件的对象。是的,您想要响应点击手势的每个视图都需要自己的点击手势识别器。
您可以创建一个点击手势识别器,将其附加到所有视图的超级视图,然后编写自定义代码,使用点击的坐标来计算哪个子视图被点击(如果有的话),但这是很多工作,你必须处理边缘情况,比如点击超级视图,而不是你想要响应点击的任何视图。只需为每个视图使用单独的点击手势识别器即可。
是的,工作量很大,哈哈@DuncanC。每个视图都需要自己独特的点击手势识别器。不知道 - 谢谢!【参考方案2】:
一个手势应该只与一个视图相关联
for label in viewLabels
let removeLabelTapGesture = UITapGestureRecognizer(target: self, action: #selector(removeTagLabel(_:)))
label.addGestureRecognizer(removeLabelTapGesture)
例如创建一个 UIImageView ,并多次添加到 self.view 中,你只会得到一次,因为它是一个对象
【讨论】:
以上是关于将点击手势添加到插座集合的主要内容,如果未能解决你的问题,请参考以下文章