即使在控制台中给出新分配的值,UILabel也不会显示其正确的值

时间:2016-02-02 09:27:43

标签: iphone uilabel nsattributedstring

我有一个显示为问题的UILabel。它成功显示以编程方式分配给它的问题文本。但是后来根据一个if else条件,我必须更改标签中的文本。具体来说,我想在字符串的末尾显示一个星号(*)标记,如果这是一个强制性的问题。*应该是红色的,文本的其余部分应该是黑色的。但它只显示问题而不是*标记。如果我尝试打印questLabel.text,它会在最后给出带*标记的问题。这是我正在尝试的代码< / p>

  questText = questLabel.text;
         questText = [questText stringByAppendingString:@"✶"];
 NSMutableAttributedString * str = [[NSMutableAttributedString alloc] initWithString:questText];
         NSMutableAttributedString *text =
            [[NSMutableAttributedString alloc]
             initWithAttributedString: str];
             int length = (int)text.length;
            [text addAttribute:NSForegroundColorAttributeName
                         value:[UIColor redColor]
                         range:NSMakeRange(length-1, 1)];
            [questLabel setAttributedText: text];

如果我尝试打印questLabel.attributedText:

的值
Question{
}✶{
    NSColor = "UIDeviceRGBColorSpace 1 0 0 1";
}

questLabel.text的值是:Question✶

请帮我解决这个问题..提前谢谢..

2 个答案:

答案 0 :(得分:1)

您应该将代码更改为此。

NSString *questText = questLabel.text;
questText = [questText stringByAppendingString:@"✶"];

NSMutableAttributedString *text =
[[NSMutableAttributedString alloc] initWithString:questText];

int length = (int)text.length;

[text addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(0, length-1)];
[text addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(length-1, 1)];
[questLabel setAttributedText: text];

答案 1 :(得分:0)

你也可以尝试这个

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:self.questLabel.text attributes:@{NSForegroundColorAttributeName:[UIColor blackColor]}];

NSMutableAttributedString *starString = [[NSMutableAttributedString alloc] initWithString:@"✶" attributes:@{NSForegroundColorAttributeName:[UIColor redColor]}];

[string appendAttributedString:starString];

[self.questLabel setAttributedText:string];