2016-01-18 4 views
0

Итак, я создаю динамические метки, и мне нужно получить их значение при нажатии. Я создаю метки с номерами 1 по 10 с циклом for. Затем я добавляю их в представление вместе с UITapGestureRecognizer, чтобы обнаружить, когда он постучал. Что мне нужно сделать, так это получить текст ярлыка. Поэтому, если бы я нажал на метку с текстом 1, я бы ожидал возвращения 1. Вот что я делаю, чтобы создать ярлык и добавить распознаватель жестов.Получить значение tapped UILabel

for number in numbers.characters { 
     let touch = UITapGestureRecognizer(target:self, action: "numberClicked") 
     touch.numberOfTapsRequired = 1 

     let label = UILabel(frame: CGRectMake(CGFloat(x), CGFloat(y1), CGFloat(width), CGFloat(height))) 
     label.font = label.font.fontWithSize(38) 
     label.text = String(number) 
     label.userInteractionEnabled = true 
     label.addGestureRecognizer(touch) 
     self.view.addSubview(label) 
    } 
+0

Я не уверен, почему этот вопрос считается основанным на мнениях. Он задает основной вопрос «как» в отношении конкретного API. Ответы не основаны главным образом на мнении, а скорее на том, как работает класс 'UILabel'. –

ответ

1

Вот пример получения текста метки в вашей функции действия. Ключевое изменение состоит в том, чтобы добавить двоеточие к имени действия касания, указав, что он принимает аргумент отправителя. Затем вы можете получить доступ к объекту view отправителя, чтобы добраться до самого .

for number in numbers.characters { 
    // add a colon after "numberClicked" to indicate it takes an argument 
    let touch = UITapGestureRecognizer(target:self, action: "numberClicked:") 
    touch.numberOfTapsRequired = 1 

    let label = UILabel(frame: CGRectMake(CGFloat(x), CGFloat(y1), CGFloat(width), CGFloat(height))) 
    label.font = label.font.fontWithSize(38) 
    label.text = String(number) 
    label.userInteractionEnabled = true 
    label.addGestureRecognizer(touch) 
    self.view.addSubview(label) 
} 


func numberClicked(gesture: UIGestureRecognizer) { 
    if gesture.state == .Ended { 
     if let theLabel = (gesture.view as? UILabel)?.text { 
      print(theLabel) // print the "1" 
     } 
    } 
} 
+0

'func numberClicked (отправитель: UILabel) {if let theTitle = sender.text {...}}' –

+0

Кажется, что это не работает. Похоже, что 'theView = отправитель как? UILabel' не является правдой :( –

+0

@LeoDabus при попытке сделать это по-своему, я получаю сообщение об ошибке, говоря, что 'text' недоступен, поскольку он устарел –

Смежные вопросы