代码之家  ›  专栏  ›  技术社区  ›  Piepants

如何将下划线和链接属性添加到文本的相同部分?

  •  -1
  • Piepants  · 技术社区  · 6 年前

    我有一个UITextView,想在文本中添加一些带下划线的链接,代码如下:

        subText.text = NSLocalizedString("VC_COMMON_SUBSCRIBE_FULL_TEXT", comment: "")
        let theString = subtext.attributedText?.mutableCopy(with: nil) as! NSMutableAttributedString
        let tcRange = theString.mutableString.range(of: NSLocalizedString("VC_COMMON_SUBSCRIBE_TERMS_TEXT", comment: ""))
        let ppRange = theString.mutableString.range(of: NSLocalizedString("VC_COMMON_SUBSCRIBE_PRIVACY_TEXT", comment: ""))
        theString.addAttribute(NSLinkAttributeName, value: Config.termsAndConditionsURL(), range: tcRange)
        theString.addAttribute(NSLinkAttributeName, value: Config.privacyPolicyURL(), range: ppRange)
        theString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.styleSingle.rawValue, range: tcRange)
        theString.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.styleSingle.rawValue, range: ppRange)
        subtext.attributedText = theString
    

    此代码的问题是,运行包含链接的文本部分时不可见(尽管链接是可选择的,即使其文本不可见),如果我注释掉链接属性并仅使用下划线属性,则文本将按预期带下划线。 为什么添加link属性会导致文本不显示?

    我尝试使用UILabel而不是UITextView,它显示正确,但是在这种情况下链接不起作用,即使UILabel将userInteractionEnabled设置为true。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Sweeper    6 年前

    我用自己的字符串替换了本地化字符串,用伪链接替换了链接此代码正确显示文本视图:

    let subText = UITextView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
    subText.text = NSLocalizedString("These are the terms. This is our privacy policy", comment: "")
    let theString = subText.attributedText?.mutableCopy(with: nil) as! NSMutableAttributedString
    let tcRange = theString.mutableString.range(of: NSLocalizedString("terms", comment: ""))
    let ppRange = theString.mutableString.range(of: NSLocalizedString("privacy policy", comment: ""))
    theString.addAttribute(NSAttributedStringKey.link, value: "https://google.com", range: tcRange)
    theString.addAttribute(NSAttributedStringKey.link, value: "https://google.com", range: ppRange)
    theString.addAttribute(NSAttributedStringKey.underlineStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: tcRange)
    theString.addAttribute(NSAttributedStringKey.underlineStyle, value: NSUnderlineStyle.styleSingle.rawValue, range: ppRange)
    subText.attributedText = theString
    

    来自操场quicklook的图像:

    enter image description here

    似乎您使用的常量如下 NSUnderlineStyleAttributeName . 它们已重命名为 NSAttributedStringKey.underlineStyle 等等。