【问题标题】:How to highlight multiple text fragments on iOS?如何在 iOS 上突出显示多个文本片段?
【发布时间】:2023-03-15 09:04:01
【问题描述】:

过去几天,我一直在寻找合适的解决方案来突出显示 iOS 上的多个文本片段。总体思路类似于亚马逊 Kindle 应用程序中文本突出显示的工作原理。

我已经尝试过UITextViewUIWebView,但在可用性和性能方面我还没有找到合适的解决方案。

这个想法很简单。用户点击一个句子并且该句子被突出显示。当点击另一个句子时,该句子也会突出显示。用于突出显示文本的内置解决方案不适用于此目的。该解决方案的一个重要方面是文本需要设置样式,从 iOS 6 开始,UITextView 就可以做到这一点。

我的问题很笼统,也就是说,有哪些可行的方法来实现此类功能?有没有符合我描述的开源解决方案?

【问题讨论】:

    标签: ios uiwebview uitextview highlighting


    【解决方案1】:

    我会建议你在多行 UILabel 上使用 NSAttributedString。从 iOS 6 开始,UILabels 默认支持属性字符串,无需任何修改。

    NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"Some text and some more %@", dynamicString]];
    
    //Change background color to highlight a sentence, by giving sentence's range
    [str addAttribute:NSBackgroundColorAttributeName value:[UIColor yellowColor] range:NSMakeRange(sentenceStartIndex, sentenceLength)];
    
    [label setAttributedText:str];
    

    编辑:原来 UITextViews 也支持 NSAttributedString 我没试过,所以你可以用 UITextViews 替换 UILabels。

    【讨论】:

    • 我的主要问题不是对NSAttributedString 的支持,而是如何实现高亮多个文本片段的能力。正如我在问题中提到的,我知道 UILabelUITextView 自 iOS 6 以来都支持 NSAttributedString
    【解决方案2】:

    我建议使用 Matt Thompson 的 TTTAttributedLabel。它支持属性字符串,可以一直使用到 iOS 4,并且获得 MIT 许可。

    【讨论】:

    • 项目的部署目标是iOS 6,所以我可以使用UILabelUITextView。主要问题是如何实现高亮多个文本片段的能力。
    • 在这种情况下,guenis 的答案对你来说应该没问题 - 只需添加多个属性,每个属性都有不同的范围。
    猜你喜欢
    • 2021-03-06
    • 2012-10-27
    • 2013-08-30
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2011-04-23
    相关资源
    最近更新 更多