Swift:addGestureRecognizer 不适用于堆栈视图子项

Swift: addGestureRecognizer not work for stackview children

代码:

for ... {
   let view = CategoryClass.createMyClassView()
   view.myLabel.text = packTitle
   view.twoLabel.text = packText
   view.bgCaategory.layer.cornerRadius = 30

   i = i + 1
   if(i == 1){
      selectPackId = packId!;
      view.imgSelect.image = UIImage(named: "selected")
   } else {
      view.imgSelect.image = UIImage(named: "select")
   }

   view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleSendData(sender:))))

   self.stackView.addArrangedSubview(view)
}

@objc func handleSendData(sender: UITapGestureRecognizer) {
   print("H 1")
}

如果我单击查看,则不会打印任何内容"H 1"

我想要如果我点击视图,获取 id 或视图的另一个值

它不起作用的原因可能是错误的方法签名。识别器操作的正确签名是这样的:

recognizerAction(_ recognizer: UIGestureRecognizer)

如果您在界面生成器中创建 UIStackView,isUserInteractionEnabled 属性 默认为 false。这意味着该视图及其所有子视图不会响应用户交互。

当您在代码中创建视图时,此 属性 默认为 true

添加:

stackView.isUserInteractionEnabled = true

您只需添加一次,例如在您的 viewDidLoad 中。

如果按照 Marcel 的建议添加 isUserInteractionEnabled 仍然不起作用,还要确保层次结构中的每个父视图都有一个有效的框架(您可以在 Debug View Hierarchy 中检查)。

例如我碰巧将 UIStackView 添加到父 UIView 中,但布局约束不正确,所以我最终将父 UIView 框架大小设置为 0(但 UIStackView 仍然可见)。