NSString一个或多个颜色NSMutableStrings是不可能的。所以我听说了一些关于 iPad SDK 3.2* (或大约 3.2) NSAttributedString 引入的内容,并且从 iPhone SDK 4.0 beta 开始在 iPhone 上可用。 ***
NSString
NSMutableStrings
NSAttributedString
我想要一个具有三种颜色的字符串。
我不使用 3 个单独的 NSStrings 的原因是因为三个NSAttributedString子字符串中的每一个的长度经常变化,所以我宁愿不使用任何计算来重新定位 3 个单独的NSString对象。
如果可以使用NSAttributedString我如何进行以下操作 - (如果无法使用 NSAttributed 字符串,您将如何做):
编辑: 请记住,@"first"和@"second"将@"third"随时被其他字符串替换。所以使用硬编码的 NSRange 值是行不通的。
@"first"
@"second"
@"third"
在构建属性字符串时,我更喜欢使用可变子类,只是为了让事情更整洁。
话虽如此,以下是创建三色属性字符串的方法:
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"firstsecondthird"]; [string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)]; [string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)]; [string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];
在浏览器中输入。 警告实施者
显然,您不会在这样的范围内进行硬编码。也许相反,您可以执行以下操作:
NSDictionary *wordToColorMapping = ....; //an NSDictionary of NSString => UIColor pairs NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@""]; for (NSString *word in wordToColorMapping) { UIColor *color = [wordToColorMapping objectForKey:word]; NSDictionary *attributes = [NSDictionary dictionaryWithObject:color forKey:NSForegroundColorAttributeName]; NSAttributedString *subString = [[NSAttributedString alloc] initWithString:word attributes:attributes]; [string appendAttributedString:subString]; [subString release]; } //display string