如何在Swift中将"addTarget"添加到UILabel

gar*_*wer 9 uilabel swift addtarget

我试图在Swift中添加标签,这些标签是在循环中添加的.然后我想在添加时为每个添加一个'TapGesture'事件.它可以工作,但问题是被调用的函数从标签中获取数据,以便在单击时使用,但标签已经被重新定义,然后它会从最后添加的数据中获取数据,而不是单击的数据.我怎样才能使每一个都独一无二?

self.label.attributedText = self.myMutableString
let tapGesture = UITapGestureRecognizer(target: self, action: handleTap(label))
self.label.userInteractionEnabled=true
self.label.addGestureRecognizer(tapGesture)
self.label.font = UIFont.boldSystemFontOfSize(28)
self.label.sizeToFit()
self.label.center = CGPoint(x: screenWidth, y: top)
if(kilom>=30||self.located==false){
    self.scroller.addSubview(self.label)
    if(device=="iPhone"||device=="iPhone Simulator"){
        top = top+80
    }
    else{
        top = top+140
    }
}
Run Code Online (Sandbox Code Playgroud)

下面的代码是手势识别器,它获取标签数据并使用它:

func handleTap(sender:UILabel){
    var a = self.label.text
    let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

    let resultViewController = storyBoard.instantiateViewControllerWithIdentifier("displayer") 

    self.presentViewController(resultViewController, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

vac*_*ama 12

a的处理函数作为UITapGestureRecognizer传递UITapGestureRecognizersender.您可以使用viewview属性访问它所附加的内容.我会建议这样的事情:

func handleTap(sender: UITapGestureRecognizer) {
    guard let a = (sender.view as? UILabel)?.text else { return }

    ...
}
Run Code Online (Sandbox Code Playgroud)

您还需要更改选择器的签名:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap))
Run Code Online (Sandbox Code Playgroud)

或者对于早期版本的Swift:

let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:")
Run Code Online (Sandbox Code Playgroud)


小智 5

环球银行金融电信协会5.1

@vacawana 的回答很好,但我只想发布完整的代码,以提供一些帮助。您需要向标签添加 isUserInteractionEnabled 以及创建的 tapGesture。

let label = UILabel()
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap))

label.isUserInteractionEnabled = true
label.addGestureRecognizer(tapGesture)
return label
Run Code Online (Sandbox Code Playgroud)

不要忘记在“func handleTap”之前添加@objc