Rightpoint / BonMot

Beautiful, easy attributed strings in Swift
MIT License
3.56k stars 197 forks source link

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

Open zuqiu123 opened 2 years ago

zuqiu123 commented 2 years ago
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

ZevEisenberg commented 2 years ago

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 commented 2 years ago

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