我试着用下面的代码做一个可点击的UILabel:
let tap_plato = UITapGestureRecognizer(target: self, action: #selector(ViewController.ale_plato1))
plato1.isUserInteractionEnabled = true
plato1.addGestureRecognizer(tap_plato)
...
@objc
func ale_plato1(sender: UITapGestureRecognizer){
let label = sender.view
print ("tapped!")
}这样做效果很好。但是我想把参数传递给函数。如下所示:
let tap_plato = UITapGestureRecognizer(target: self, action: #selector(MenuController.ale_plato1("parameter")))
plato1.isUserInteractionEnabled = true
plato1.addGestureRecognizer(tap_plato)
@objc
func ale_plato1(sender: UITapGestureRecognizer, parameterRecived: String){
}但我不知道斯威夫特3是怎么做到的。
有什么帮助吗?谢谢你
发布于 2019-01-23 23:54:00
无论您在何处创建多个UILabel,都要将每个标签设置为不同的标签。
for i in 0..<3 {
let label = UILabel()
label.tag = i
let tap = UITapGestureRecognizer(target: self, action: #selector(tap))
label.isUserInteractionEnabled = true
label.addGestureRecognizer(tap_plato)
}
@objc func tap(sender: UITapGestureRecognizer) {
let label = sender.view as! UILabel // if you are SURE that your tap will be a UILabel
if(label.tag == 0) {
label.text = "This is label 0"
if(label.tag == 1) {
label.text = "This is label 1"
}
}一下子就抛出了这一点,如果有语法问题的话就跳过吧。
在这里,我们可以创建带有标签的标签,并对它们应用相同的点击。从那里,我们可以检查它在tap方法中是什么标记,并从那里做一些事情。
发布于 2019-01-23 23:45:01
您可以对Int值使用tag属性,但如果您需要其他属性:
创建一个带有值变量的自定义UILabel类。
class LabelWithValue : UILabel {
var value : String = ""
}然后,您可以将其用作普通标签
let label = LabelWithValue()
label.text = "bla"
label.value = "Anything"
label.isUserInteractionEnabled = true
label.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleGetText)))然后你就可以得到它的文本和值了。
@objc func handleGetText(_ sender : UITapGestureRecognizer) {
if let label = sender.view as? LabelWithValue {
print(label.text)
print(label.value)
}
}https://stackoverflow.com/questions/54330736
复制相似问题