2016-06-04 2 views
7

Я пытаюсь добавить метки в Swift, которые добавляются в цикле. Затем я хочу добавить событие «TapGesture» для каждого из них по мере добавления. Он работает, но проблема в том, что вызванная функция берет данные с метки, которые нужно использовать при нажатии, но метка была переопределена к тому времени и она берет данные из последнего добавленного, а не того, который был нажат. Как я могу сделать каждого уникальным?Как «добавитьTarget» в UILabel в Swift

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

Хорошо спасибо. –

+0

Из кода, который вы опубликовали, кажется, что у вас есть только одна метка. Вы изменяете его атрибуты, но не создаете новый (если только в коде, который вы не указали). –

ответ

6

Функция обработчика для 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:") 
+0

Он работал идеально. Спасибо! –

+0

У меня возникли проблемы с добавлением значения для undefinedkey для каждой метки? Я пытаюсь хранить данные в этом, но продолжаю получать сообщение об ошибке «UncaughtNSException» и «это не жалоба на кодирование» –

+0

Что вы пытаетесь сделать? Обновить текст ярлыка? Можете ли вы показать строку кода, дающую вам ошибку? – vacawama