菜鸟教程小白 发表于 2022-12-13 07:42:35

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(@&#34;%@&#34;, 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]
查看完整版本: ios - UILabel 粗体/突出显示所有出现的子字符串