在可点击的 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 方法中的标签,然后从那里做一些事情。
我正在尝试通过以下代码制作可点击的 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 方法中的标签,然后从那里做一些事情。