Передача параметров в интерактивном UIabel - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь создать кликабельную UILabel, используя следующий код:

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!")

}

Это хорошо работает.Но я хочу передать параметры в функцию.Примерно так:

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 ...

Любая помощь?Спасибо тебе

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Где бы вы ни делали свой кратный UILabel, установите каждую метку на свой другой тег.

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, и сделать что-то оттуда.

0 голосов
/ 23 января 2019

Вы можете использовать атрибут tag для значений Int, но если вам нужно что-то другое:

Создание пользовательского класса UILabel с переменной-значением.

class LabelWithValue : UILabel {
    var value : String = ""
}

Тогда вы можете использовать его как обычный ярлык

let label = LabelWithValue()
label.text = "bla"
label.value = "Anything"
label.isUserInteractionEnabled = true
label.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleGetText)))

Тогда вы можете получить его текст и его значение.

@objc func handleGetText(_ sender : UITapGestureRecognizer) {
    if let label = sender.view as? LabelWithValue {
        print(label.text)
        print(label.value)
    }
}
...