[ios]更改颜色和大小的 NSString 与 NSMutableAttributedString 的部分

标签: ios Objective-C
发布时间: 2017/3/21 23:14:33
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

浏览几个 NSAttributedString 的例子但似乎无法得到这个工作。我想更改的大小颜色的部分的 NSMutableAttributedString

我试过这几个的变化︰

NSMutableAttributedString *hintText = [[NSMutableAttributedString alloc] initWithString:@"This is red and huge and this is not"];

//Black and large
[hintText setAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Futura-Medium" size:20.0f], NSForegroundColorAttributeName:[UIColor blackColor]} range:NSMakeRange(0, 11)];

//Rest of text -- just futura
[hintText setAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Futura-Medium" size:16.0f]} range:NSMakeRange(12, ((hintText.length -1) - 12))];

这只是改变大小的文本,不是颜色。有人可以告诉我正确的方向吗?

编辑︰ 我使用这般如此︰ myUILabel.attributedText = hintText ;

解决方法 1:

当我试图这样做时,认为要更容易建立各个部分 (每个是 NSAttributedString ),然后"粘附"他们与类似下面的内容︰

NSAttributedString *string1 = // Get the red and large string here
NSAttributedString *string2 = // Get the just futura string here

NSMutableAttributedString *hintText = [[NSMutableAttributedString alloc] init];
[hintText appendAttributedString:string1];
[hintText appendAttributedString:string2];

我发现这使得它更容易遵循的逻辑流,我永远不会发现这种方式需要优化的性能限制。


更新︰

总的来说,我得到了以下代码,以工作因为我相信 OP 欲望︰

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSMutableAttributedString *hintText = [[NSMutableAttributedString alloc] initWithString:@"This is red and huge and this is not"];

    //Red and large
    [hintText setAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Futura-Medium" size:20.0f], NSForegroundColorAttributeName:[UIColor redColor]} range:NSMakeRange(0, 20)];

    //Rest of text -- just futura
    [hintText setAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Futura-Medium" size:16.0f]} range:NSMakeRange(20, hintText.length - 20)];

    [self.button setAttributedTitle:hintText forState:UIControlStateNormal];

}

请注意,他指定 [UIColor blackColor] 和我更新到 [UIColor redColor] 。此外,我更新范围计算要包括的所有字符在"这是红色和巨大"。

赞助商