ios - UILabel 粗体/突出显示所有出现的子字符串
<p><p>我在自定义表格单元格中有多个 UILabel。这些标签包含不同的文本或不同的长度。</p>
<p>就目前而言,我有 UILabel 子类,允许我实现这些方法</p>
<pre><code>- (void)boldRange:(NSRange)range {
if (!) {
return;
}
NSMutableAttributedString *attributedText;
if (!self.attributedText) {
attributedText = [ initWithString:self.text];
} else {
attributedText = [initWithAttributedString:self.attributedText];
}
} range:range];
self.attributedText = attributedText;
NSLog(@"%@", NSStringFromRange(range));
}
- (void)boldSubstring:(NSString*)substring {
NSRange range = ;
;
}
</code></pre>
<p>这允许我调用 <code>;</code> 这将 <strong>BOLD</strong> 第一次出现单词“test”。</p >
<p>我追求的是能够创建新的子类方法或扩展我已经拥有的方法,以允许我替换标签中指定单词的所有出现。 </p>
<p>我研究了许多方法,包括 3rd 方框架。我遇到的麻烦是这对我来说是一个学习过程。我自己尝试完成这项工作对我来说会更有益。</p>
<p>提前致谢!</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p><code>rangeOfString</code> 返回第一次出现,这是正常行为。
来自 <a href="https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/rangeOfString%3a" rel="noreferrer noopener nofollow">Doc</a> :</p>
<blockquote>
<p>Finds and returns the range of the first occurrence of a given string
within the receiver.</p>
</blockquote>
<p>您可以使用 <code>NSRegularExpression</code>,并使用 <code>matchesInString:options:range</code> 来获得 <code>NSTextCheckingResult</code> 的 <code>NSArray</code> (具有 <code>NSRange</code> 属性),使用 <code>for 循环</code> 将其加粗。 </p>
<p>这应该可以解决问题:</p>
<pre><code>- (void)boldSubstring:(NSString*)substring
{
if (!)
{
return;
}
NSError *error;
NSRegularExpression *regex = ;
if (!error)
{
NSMutableAttributedString *attributedString = [ initWithString:];
NSArray *allMatches = options:0 range:NSMakeRange(0, [ length])];
for (NSTextCheckingResult *aMatch in allMatches)
{
NSRange matchRange = ;
} range: matchRange];
}
;
}
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - UILabel 粗体/突出显示所有出现的子字符串,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/23496057/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/23496057/
</a>
</p>
页:
[1]