首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在可单击的UIabel中传递参数

在可单击的UIabel中传递参数
EN

Stack Overflow用户
提问于 2019-01-23 23:36:45
回答 2查看 111关注 0票数 0

我试着用下面的代码做一个可点击的UILabel:

代码语言:javascript
复制
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!")

}

这样做效果很好。但是我想把参数传递给函数。如下所示:

代码语言:javascript
复制
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是怎么做到的。

有什么帮助吗?谢谢你

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-23 23:54:00

无论您在何处创建多个UILabel,都要将每个标签设置为不同的标签。

代码语言:javascript
复制
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方法中是什么标记,并从那里做一些事情。

票数 1
EN

Stack Overflow用户

发布于 2019-01-23 23:45:01

您可以对Int值使用tag属性,但如果您需要其他属性:

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

代码语言:javascript
复制
class LabelWithValue : UILabel {
    var value : String = ""
}

然后,您可以将其用作普通标签

代码语言:javascript
复制
let label = LabelWithValue()
label.text = "bla"
label.value = "Anything"
label.isUserInteractionEnabled = true
label.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleGetText)))

然后你就可以得到它的文本和值了。

代码语言:javascript
复制
@objc func handleGetText(_ sender : UITapGestureRecognizer) {
    if let label = sender.view as? LabelWithValue {
        print(label.text)
        print(label.value)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54330736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档