如何使用 Objective C 更改 NSLocalizedString 中部分文本的颜色?
How can I change color of part of the text in a NSLocalizedString with Objective C?
这是我的问题。
我有一个 ViewController,其中有一个带有文本的标签,我想更改该句子中某些单词的颜色。
该字符串是一个 NSLocalizedString ,它是用不同的语言编写的,并根据用户系统语言而变化。
self.welcomeMessageLabel.text = NSLocalizedString(@"welcome_message", nil);
这就是我想要达到的结果。
如何为部分文本着色?
NSLocalizedString(@"welcome_message", nil)
returns一个NSString
.
澄清一下,它只是一组“字符”,没有bold/colors、斜体、偏移量等概念
并且要显示具有不同渲染(颜色、粗体等)的不同字符,您需要使用 NSAttributedString
因为只是一组字符,你需要找到哪些元素需要有不同的渲染。为此,您可以使用标签,例如 HTML、Markdown、BBCode 标签。
部分示例,我将仅以粗体显示简化聚焦:
//Initial text
...un link all'indirizzo...
// With BBCode tag
...un [b]link[/b] all'indirizzo...
// With HTML tag
...un <b>link</b> all'indirizzo...
// With Markdown tag
...un **link** all'indirizzo...
// With custom tag
...un {link} all'indirizzo...
将该新值放入您的字符串文件中。
如果您使用 HTML,则有一个内置的初始化方法。
参见相关问题:Convert HTML to NSAttributedString in iOS
其他的可以使用第三方库解析器,也可以自己解析。您可以使用 NSRegularExpression
、NSScanner
等...,然后将目标效果应用到正确的范围。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_welcomeMessageLabel.attributedText = [self attributedString1];
}
- (NSAttributedString *)attributedString1 {
NSString *string = @"Ti abbiamo inviato un link all'inndirizzo email che";
NSString *substring1 = @"link";
NSString *substring2 = @"email";
// NSString *string = NSLocalizedString(@"welcome_message", nil);
// NSString *substring1 = NSLocalizedString(@"welcome_message_substring1", nil);
// NSString *substring2 = NSLocalizedString(@"welcome_message_substring2", nil);
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString: string];
NSDictionary *attributes = @{NSForegroundColorAttributeName: [UIColor orangeColor]};
[attributedString
replaceCharactersInRange:[string rangeOfString:substring1]
withAttributedString:[[NSAttributedString alloc] initWithString: substring1 attributes:attributes]
];
[attributedString
replaceCharactersInRange:[string rangeOfString:substring2]
withAttributedString:[[NSAttributedString alloc] initWithString: substring2 attributes:attributes]
];
return attributedString;
}
@end
这是我的问题。 我有一个 ViewController,其中有一个带有文本的标签,我想更改该句子中某些单词的颜色。 该字符串是一个 NSLocalizedString ,它是用不同的语言编写的,并根据用户系统语言而变化。
self.welcomeMessageLabel.text = NSLocalizedString(@"welcome_message", nil);
这就是我想要达到的结果。
如何为部分文本着色?
NSLocalizedString(@"welcome_message", nil)
returns一个NSString
.
澄清一下,它只是一组“字符”,没有bold/colors、斜体、偏移量等概念
并且要显示具有不同渲染(颜色、粗体等)的不同字符,您需要使用 NSAttributedString
因为只是一组字符,你需要找到哪些元素需要有不同的渲染。为此,您可以使用标签,例如 HTML、Markdown、BBCode 标签。
部分示例,我将仅以粗体显示简化聚焦:
//Initial text
...un link all'indirizzo...
// With BBCode tag
...un [b]link[/b] all'indirizzo...
// With HTML tag
...un <b>link</b> all'indirizzo...
// With Markdown tag
...un **link** all'indirizzo...
// With custom tag
...un {link} all'indirizzo...
将该新值放入您的字符串文件中。
如果您使用 HTML,则有一个内置的初始化方法。
参见相关问题:Convert HTML to NSAttributedString in iOS
其他的可以使用第三方库解析器,也可以自己解析。您可以使用 NSRegularExpression
、NSScanner
等...,然后将目标效果应用到正确的范围。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_welcomeMessageLabel.attributedText = [self attributedString1];
}
- (NSAttributedString *)attributedString1 {
NSString *string = @"Ti abbiamo inviato un link all'inndirizzo email che";
NSString *substring1 = @"link";
NSString *substring2 = @"email";
// NSString *string = NSLocalizedString(@"welcome_message", nil);
// NSString *substring1 = NSLocalizedString(@"welcome_message_substring1", nil);
// NSString *substring2 = NSLocalizedString(@"welcome_message_substring2", nil);
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString: string];
NSDictionary *attributes = @{NSForegroundColorAttributeName: [UIColor orangeColor]};
[attributedString
replaceCharactersInRange:[string rangeOfString:substring1]
withAttributedString:[[NSAttributedString alloc] initWithString: substring1 attributes:attributes]
];
[attributedString
replaceCharactersInRange:[string rangeOfString:substring2]
withAttributedString:[[NSAttributedString alloc] initWithString: substring2 attributes:attributes]
];
return attributedString;
}
@end