在可点击的 UIabel 中传递参数

Passing parameters in a clickable UIabel

我正在尝试通过以下代码制作可点击的 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){

}

但我不知道如何在 swift 3...

有什么帮助吗?谢谢

您可以将 tag 属性用于 Int 值,但如果您想要除此以外的任何其他属性:

创建一个带有值变量的自定义 UILabel Class。

class LabelWithValue : UILabel {
    var value : String = ""
}

然后你就可以把它当作一个普通的Label来使用了

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)
    }
}

无论您在哪里创建多个 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 方法中的标签,然后从那里做一些事情。