簡體   English   中英

如何更改某些屬性字符串的文本顏色或使其變為粗體?

[英]How to change a text color for a certain attributed string or make it bold?

假設我有NSString * hello = @“ hello world”;

現在,我需要一個加粗的字符串,在字符串中,hello world中的地獄被加粗。

網路上有個功能可以做到:

- (NSMutableAttributedString*) word:(NSString*)substringToHighlight{

    NSMutableAttributedString * mutableAttributedString = [[ NSMutableAttributedString alloc]initWithString:self];
    NSUInteger count = 0, length = [mutableAttributedString length];
    NSRange range = NSMakeRange(0, length);

    count = 0,
    length = [mutableAttributedString length];
    range = NSMakeRange(0, length);
    while(range.location != NSNotFound)
    {
        range = [[mutableAttributedString string] rangeOfString:substringToHighlight options:0 range:range];
        if(range.location != NSNotFound) {

            //[mutableAttributedString setTextColor:[UIColor blueColor] range:NSMakeRange(range.location, [word length])];
            range = NSMakeRange(range.location + range.length, length - (range.location + range.length));
            count++;
        }
    }
    return mutableAttributedString;
}

但是,該功能不起作用,因為mutableAttributedString不支持setTextColor

我也試過

NSDictionary * dict = @{kCTFontAttributeName:boldFontName};
        [mutableAttributedString setAttributes:{kCTFontAttributeName:boldFontName} range:NSMakeRange(range.location, substringToHighlight.length)];

但收到一條消息,未定義kCTFontAttributeName。

您可以使用rangeOfString:options:range:或NSScanner(還有其他可能,例如regexp,但無論如何)。

根據給定的選項,在接收器的給定范圍內查找並返回給定字符串首次出現的范圍。

  • (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)aRange

這是另一種解決方案:

然后,您需要像這樣將其轉換為NSMutableAttributedString

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"hello world"];
NSRange selectedRange = NSMakeRange(0, 4); // 4 characters, starting at index 0

[string beginEditing];

[string addAttribute:NSFontAttributeName
           value:[NSFont fontWithName:@"Helvetica-Bold" size:12.0]
           range:selectedRange];

[string endEditing];

我認為這是最好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM