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 仍然可见)。
代码:
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 仍然可见)。