我创建了一个日期组件,但GestureRecognizer有问题。
ios - iOS:未触发UIView中的TapGestureRecognizer-LMLPHP
第一行是带有标签的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对象不能在不同视图上添加相同的点击手势
希望它能解决你的问题

10-08 05:45
查看更多