• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - UILabel 粗体/突出显示所有出现的子字符串

[复制链接]
菜鸟教程小白 发表于 2022-12-13 07:42:35 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在自定义表格单元格中有多个 UILabel。这些标签包含不同的文本或不同的长度。

就目前而言,我有 UILabel 子类,允许我实现这些方法

- (void)boldRangeNSRange)range {
if (![self respondsToSelectorselector(setAttributedText]) {
    return;
}
NSMutableAttributedString *attributedText;
if (!self.attributedText) {
    attributedText = [[NSMutableAttributedString alloc] initWithString:self.text];
} else {
    attributedText = [[NSMutableAttributedString alloc]initWithAttributedString:self.attributedText];
}
     [attributedText setAttributes{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]} range:range];
self.attributedText = attributedText;
NSLog(@"%@", NSStringFromRange(range));
}

- (void)boldSubstringNSString*)substring {
    NSRange range = [self.text rangeOfString:substring];
    [self boldRange:range];
}

这允许我调用 [cell.StoryLabel boldSubstring"test"]; 这将 BOLD 第一次出现单词“test”。

我追求的是能够创建新的子类方法或扩展我已经拥有的方法,以允许我替换标签中指定单词的所有出现。

我研究了许多方法,包括 3rd 方框架。我遇到的麻烦是这对我来说是一个学习过程。我自己尝试完成这项工作对我来说会更有益。

提前致谢!



Best Answer-推荐答案


rangeOfString 返回第一次出现,这是正常行为。 来自 Doc :

Finds and returns the range of the first occurrence of a given string within the receiver.

您可以使用 NSRegularExpression,并使用 matchesInStringptions:range 来获得 NSTextCheckingResultNSArray (具有 NSRange 属性),使用 for 循环 将其加粗。

这应该可以解决问题:

- (void)boldSubstringNSString*)substring
{
    if (![self respondsToSelectorselector(setAttributedText])
    {
        return;
    }

    NSError *error;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern: substring options:NSRegularExpressionCaseInsensitive error:&error];

    if (!error)
    {
        NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:[self text]];
        NSArray *allMatches = [regex matchesInString:[self text] options:0 range:NSMakeRange(0, [[self text] length])];
        for (NSTextCheckingResult *aMatch in allMatches)
        {
            NSRange matchRange = [aMatch range];
            [attributedString setAttributes{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]} range: matchRange];
        }
        [self setAttributedText:attributedString];
    }
}

关于ios - UILabel 粗体/突出显示所有出现的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23496057/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap