我创建了一个日期组件,但GestureRecognizer有问题。
第一行是带有标签的StackView。如果我附加一个TapGestureRecognizer,它会在触摸时触发。以下行是Stackview中的子视图,由标签视图和图像视图组成。我可以将识别器添加到子视图、标签或图像视图。它永远不会被触发,我确保启用了用户交互。
有什么问题吗?
下面是一个如何添加识别器的示例:
func addTap(){
dayLabel.isUserInteractionEnabled = true
imageView.isUserInteractionEnabled = true
isUserInteractionEnabled = true
tap1 = UITapGestureRecognizer(target: self, action: #selector(handleTap(recognizer:)))
tap2 = UITapGestureRecognizer(target: self, action: #selector(handleTap(recognizer:)))
tap3 = UITapGestureRecognizer(target: self, action: #selector(handleTap(recognizer:)))
dayLabel.addGestureRecognizer(tap1!)
imageView.addGestureRecognizer(tap2!)
addGestureRecognizer(tap3!)
}
@objc func handleTap(recognizer: UITapGestureRecognizer){
logger.debug("tap")
changeSelection()
}
你可以在这里找到一个简单的演示项目来解决这个问题:https://github.com/ogezue/datedemo
最佳答案
我看到的问题是你的视线必须被图像和标签覆盖
并且您正在将相同的UITapGestureRecognizer
添加到所有对象中,以便添加到最后一个对象上,例如view(包含图像和标签),这样它可能无法获取tap事件
您需要三个不同的UITapGestureRecognizer
对象不能在不同视图上添加相同的点击手势
希望它能解决你的问题