Как 'addTarget' в UILabel в Swift
Я пытаюсь добавить метки в 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
}
}
код ниже является распознавателем жестов, который получает данные метки и использует его:
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)
}
1 ответов
функция обработчика для UITapGestureRecognizer
передает UITapGestureRecognizer
как sender
. Вы можете получить доступ к view
что он прикреплен с view
собственность. Я бы предложил что-то вроде этого:
func handleTap(sender: UITapGestureRecognizer) {
guard let a = (sender.view as? UILabel)?.text else { return }
...
}
Вам также нужно будет изменить подпись вашего селектора:
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap))
или для более ранних версий Swift:
let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:")