BonMot icon indicating copy to clipboard operation
BonMot copied to clipboard

When there are multiple clickable texts in the string, the color cannot be set differently

Open zuqiu123 opened this issue 2 years ago • 2 comments

let htmlStr = "You can parse HTML with <strong>strong</strong>, <em>em</em>, and even <strong><em>nested strong and em</em></strong> tags."
let emStr = StringStyle(
    .link(URL("emStr://")),
    .color(UIColor.red),
    .underline(.single, nil)
)

let strongStr = StringStyle(
    .link(URL("strongStr://")),
    .color(UIColor.green),
    .underline(.single, nil)
)

let style = StringStyle(
    .font(.systemFont(ofSize: 30)),
    .color(.black),
    .xmlRules([
        .style("em", emStr),
        .style("strong", strongStr),
    ])
)
let attributedText = htmlStr.styled(with: style)

textView.linkTextAttributes = [
    NSAttributedString.Key.foregroundColor: UIColor.yellow
]
textView.attributedText = attributedText

Two links are set. If you do not set this sentence,

  textView.linkTextAttributes = [
            NSAttributedString.Key.foregroundColor: UIColor.yellow
        ]
image

they will all show blue. After setting, they will all turn yellow. How to set two different colors, and you can click the link,please help

zuqiu123 avatar Jun 12 '22 12:06 zuqiu123

Hi @zuqiu123, and thanks for your report. Unfortunately, I think this is a limitation of UITextView/UILabel, where it won't let you override the color of individual links. I don't know if TTTAttributedLabel supports multicolored links within the same attributed string, but it's worth a look.

ZevEisenberg avatar Jun 12 '22 16:06 ZevEisenberg

You might try this as well, although I haven't tested it either https://github.com/zacwest/ZSWTappableLabel

ZevEisenberg avatar Jun 12 '22 16:06 ZevEisenberg