UILabel против UITextView и ссылки на URL-адреса приписанных строк - PullRequest
0 голосов
/ 03 мая 2019

Если я использую ту же функцию, указанную ниже, чтобы установить некоторые атрибуты для приписанной строки с помощью UILabel и UITextView, то в обоих случаях дисплей выглядит одинаково, но я не могу нажать на ссылки для UILabel (взаимодействие с пользователемдля него).

Почему UILabel не реагирует на нажатия, а UITextVIew - как включить UILabel, чтобы он вел себя как UITextVIew?

Я видел прошлый вопрос и ответдолжен был установить dataDetectors для UILabel, но это должно было быть для старой версии Swift, так как она больше не существует, и я не видел ничего подобного в качестве альтернативы.

class MyViewController: UIViewController {

    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var textView1: UITextView!

    let kTextContent = "This is some text with bold and link1 and link2 and color."
    let kBoldText = "bold"
    let kLink1Text = "link1"
    let kLink2Text = "link2"
    let kColorText = "color"
    let kUrl1 = "http://www.google.com"
    let kUrl2 = "http://www.apple.com"

    override func viewDidLoad() {
        super.viewDidLoad()

        label1.text = kTextContent
        label1.attributedText = setAttributes(theAttributedString: label1.attributedText?.mutableCopy(with: nil) as! NSMutableAttributedString)

        textView1.text = kTextContent
        textView1.attributedText = setAttributes(theAttributedString: textView1.attributedText?.mutableCopy(with: nil) as! NSMutableAttributedString)
    }

    func setAttributes(theAttributedString: NSMutableAttributedString) -> NSMutableAttributedString
    {
        let boldRange = theAttributedString.mutableString.range(of: kBoldText)
        let boldFontAttribute: [NSAttributedString.Key: Any] = [NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 20)]
        theAttributedString.addAttributes(boldFontAttribute, range: boldRange)

        let link1Range = theAttributedString.mutableString.range(of: kLink1Text)
        theAttributedString.addAttribute(.link, value: kUrl1, range: link1Range)
        theAttributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: link1Range)

        let link2Range = theAttributedString.mutableString.range(of: kLink2Text)
        theAttributedString.addAttribute(NSAttributedString.Key.link, value: kUrl2, range: link2Range)
        theAttributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: link2Range)

        let colorRange = theAttributedString.mutableString.range(of: kColorText)
        theAttributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.red , range: colorRange)

        return theAttributedString
    }

1 Ответ

0 голосов
/ 03 мая 2019

A UILabel, который реагирует на нажатия, это UIButton, я предлагаю вам поменять UILabel на кнопку и соответствующим образом оформить ее. Тогда вы можете просто подключить IBAction к нему, и он будет работать.

UITextView отвечает на взаимодействие по умолчанию

...