gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:43:12 26 4
gpt4 key购买 nike

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

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

- (void)boldRange:(NSRange)range {
if (![self respondsToSelector:@selector(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)boldSubstring:(NSString*)substring {
NSRange range = [self.text rangeOfString:substring];
[self boldRange:range];
}

这让我可以调用 [cell.StoryLabel boldSubstring:@"test"]; 这将 BOLD 单词“test”的第一次出现。

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

我研究了很多方法,包括第 3 方框架。我遇到的麻烦是这对我来说是一个学习过程。如果我自己尝试完成这件事,我会受益匪浅。

提前致谢!

最佳答案

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

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

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

这应该可以解决问题:

- (void)boldSubstring:(NSString*)substring
{
if (![self respondsToSelector:@selector(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com