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

时间:2018-05-27 15:06:37

标签: ios swift

我有一个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

此代码的问题在于,运行时包含链接的文本部分不可见(尽管链接是可选的,即使其文本无法看到)如果我注释掉链接属性而只是使用下划线属性,然后文本显示为预期下划线。 为什么添加导致文本不显示的链接属性?

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

1 个答案:

答案 0 :(得分:0)

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

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

来自游乐场的图片:

enter image description here

您似乎正在使用NSUnderlineStyleAttributeName之类的常量。它们已重命名为NSAttributedStringKey.underlineStyle,依此类推。