2010-08-14 78 views
281

NSStringNSMutableStrings中的多种颜色是不可能的。所以我听说NSAttributedStringiPad SDK 3.2(或3.2左右版本)推出的,并且可以在iPhone上从iPhone SDK 4.0 beta获得。你如何使用NSAttributedString?

我想要一个有三种颜色的字符串。

我不使用3个单独的NSStrings的原因是因为三个NSAttributedString子串中每一个的长度经常变化,所以我宁愿不使用任何计算来重新定位3个单独的NSString对象。

如果使用NSAttributedString我该如何进行以下是可能的 - (如果不可能NSAttributed字符串,你会怎么做):

alt text

编辑: 记住,@"first"@"second"@"third"将在任何时候被其他字符串替换。所以使用硬编码的NSRange值将不起作用。

+0

[归因字符串斯威夫特(http://stackoverflow.com/a/32269975/3681880) – Suragch 2016-01-06 07:24:18

+0

为NSAttributeString雨燕代码:http://stackoverflow.com/questions/27728466/use-multiple-font-colors-in-a-single-label-swift/27728516#27728516 – 2017-04-08 04:47:02

回答

464

在构建属性字符串时,我更喜欢使用可变子类,只是为了保持清洁。

话虽这么说,这里是你如何创建一个三色属性串:

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 
+0

谢谢戴夫。这应该工作,看起来像我只需要用'NSMakeRange(0,[字符串长度])'等替换硬编码的'NSMakeRange'值等等,为每个字符串。 +1 – 2010-08-14 07:20:02

+0

我对如何显示此字符串非常感兴趣?谢谢 – Jack 2010-09-24 11:22:16

+0

@Jack搜索“setAttributed”的文档。这将让你知道大多数控件接受属性字符串 – 2010-09-25 15:29:44

113

的问题已经回答了......但我想说明如何添加阴影和改变与NSAttributedString字体为好,这样,当人们搜索这个话题,他们将不必继续寻找。

#define FONT_SIZE 20 
#define FONT_HELVETICA @"Helvetica-Light" 
#define BLACK_SHADOW [UIColor colorWithRed:40.0f/255.0f green:40.0f/255.0f blue:40.0f/255.0f alpha:0.4f] 

NSString*myNSString = @"This is my string.\nIt goes to a second line.";     

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
       paragraphStyle.alignment = NSTextAlignmentCenter; 
      paragraphStyle.lineSpacing = FONT_SIZE/2; 
        UIFont * labelFont = [UIFont fontWithName:FONT_HELVETICA size:FONT_SIZE]; 
        UIColor * labelColor = [UIColor colorWithWhite:1 alpha:1]; 
         NSShadow *shadow = [[NSShadow alloc] init]; 
       [shadow setShadowColor : BLACK_SHADOW]; 
       [shadow setShadowOffset : CGSizeMake (1.0, 1.0)]; 
      [shadow setShadowBlurRadius : 1]; 

NSAttributedString *labelText = [[NSAttributedString alloc] initWithString : myNSString 
         attributes : @{ 
    NSParagraphStyleAttributeName : paragraphStyle, 
      NSKernAttributeName : @2.0, 
      NSFontAttributeName : labelFont, 
    NSForegroundColorAttributeName : labelColor, 
      NSShadowAttributeName : shadow }]; 

这里是一个斯威夫特版本...

警告! 这适用于4s。

对于你必须改变所有的浮动值,以double值(因为编译器不能正常工作尚未)5S

斯威夫特枚举的字体选择:

enum FontValue: Int { 
    case FVBold = 1 , FVCondensedBlack, FVMedium, FVHelveticaNeue, FVLight, FVCondensedBold, FVLightItalic, FVUltraLightItalic, FVUltraLight, FVBoldItalic, FVItalic 
} 

斯威夫特阵列枚举访问(必要的,因为枚举不能使用 ' - '):

​​

斯威夫特属性文本功能:

func myAttributedText (myString:String, mySize: Float, myFont:FontValue) -> (NSMutableAttributedString) { 

    let shadow = NSShadow() 
    shadow.shadowColor = UIColor.textShadowColor() 
    shadow.shadowOffset = CGSizeMake (1.0, 1.0) 
    shadow.shadowBlurRadius = 1 

    let paragraphStyle = NSMutableParagraphStyle.alloc() 
    paragraphStyle.lineHeightMultiple = 1 
    paragraphStyle.lineBreakMode = NSLineBreakMode.ByWordWrapping 
    paragraphStyle.alignment = NSTextAlignment.Center 

    let labelFont = UIFont(name: helveticaFont(myFont.toRaw()), size: mySize) 
    let labelColor = UIColor.whiteColor() 

    let myAttributes :Dictionary = [NSParagraphStyleAttributeName : paragraphStyle, 
               NSKernAttributeName : 3, // (-1,5) 
               NSFontAttributeName : labelFont, 
            NSForegroundColorAttributeName : labelColor, 
              NSShadowAttributeName : shadow] 

    let myAttributedString = NSMutableAttributedString (string: myString, attributes:myAttributes) 

    // add new color 
    let secondColor = UIColor.blackColor() 
    let stringArray = myString.componentsSeparatedByString(" ") 
    let firstString: String? = stringArray.first 
    let letterCount = countElements(firstString!) 
    if firstString { 
     myAttributedString.addAttributes([NSForegroundColorAttributeName:secondColor], range:NSMakeRange(0,letterCount)) 
    } 

    return myAttributedString 
} 

用于字符串数组查找范围第一个和最后延伸:

extension Array { 
    var last: T? { 
     if self.isEmpty { 
      NSLog("array crash error - please fix") 
      return self [0] 
     } else { 
      return self[self.endIndex - 1] 
     } 
    } 
} 

extension Array { 
    var first: T? { 
     if self.isEmpty { 
      NSLog("array crash error - please fix") 
      return self [0] 
     } else { 
      return self [0] 
     } 
    } 
} 

新的颜色:

extension UIColor { 
    class func shadowColor() -> UIColor { 
     return UIColor(red: 0.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 0.3) 
    } 
    class func textShadowColor() -> UIColor { 
     return UIColor(red: 50.0/255.0, green: 50.0/255.0, blue: 50.0/255.0, alpha: 0.5) 
    } 
    class func pastelBlueColor() -> UIColor { 
     return UIColor(red: 176.0/255.0, green: 186.0/255.0, blue: 255.0/255.0, alpha: 1) 
    } 
    class func pastelYellowColor() -> UIColor { 
     return UIColor(red: 255.0/255.0, green: 238.0/255.0, blue: 140.0/255.0, alpha: 1) 
    } 
} 

我的宏替换:

enum MyConstants: Float { 
    case CornerRadius = 5.0 
} 

我的按钮壶w^/归属文字:

func myButtonMaker (myView:UIView) -> UIButton { 

    let myButton = UIButton.buttonWithType(.System) as UIButton 
    myButton.backgroundColor = UIColor.pastelBlueColor() 
    myButton.showsTouchWhenHighlighted = true; 
    let myCGSize:CGSize = CGSizeMake(100.0, 50.0) 
    let myFrame = CGRectMake(myView.frame.midX - myCGSize.height,myView.frame.midY - 2 * myCGSize.height,myCGSize.width,myCGSize.height) 
    myButton.frame = myFrame 
    let myTitle = myAttributedText("Button",20.0,FontValue.FVLight) 
    myButton.setAttributedTitle(myTitle, forState:.Normal) 

    myButton.layer.cornerRadius = myButton.bounds.size.width/MyConstants.CornerRadius.toRaw() 
    myButton.setTitleColor(UIColor.whiteColor(), forState: .Normal) 
    myButton.tag = 100 
    myButton.bringSubviewToFront(myView) 
    myButton.layerGradient() 

    myView.addSubview(myButton) 

    return myButton 
} 

我UIView /的UILabel壶W /属性文本,阴影和圆角:

func myLabelMaker (myView:UIView) -> UIView { 

    let myFrame = CGRectMake(myView.frame.midX/2 , myView.frame.midY/2, myView.frame.width/2, myView.frame.height/2) 
    let mylabelFrame = CGRectMake(0, 0, myView.frame.width/2, myView.frame.height/2) 

    let myBaseView = UIView() 
    myBaseView.frame = myFrame 
    myBaseView.backgroundColor = UIColor.clearColor() 

    let myLabel = UILabel() 
    myLabel.backgroundColor=UIColor.pastelYellowColor() 
    myLabel.frame = mylabelFrame 

    myLabel.attributedText = myAttributedText("This is my String",20.0,FontValue.FVLight) 
    myLabel.numberOfLines = 5 
    myLabel.tag = 100 
    myLabel.layer.cornerRadius = myLabel.bounds.size.width/MyConstants.CornerRadius.toRaw() 
    myLabel.clipsToBounds = true 
    myLabel.layerborders() 

    myBaseView.addSubview(myLabel) 

    myBaseView.layerShadow() 
    myBaseView.layerGradient() 

    myView.addSubview(myBaseView) 

    return myLabel 
} 

通用添加阴影:

func viewshadow<T where T: UIView> (shadowObject: T) 
{ 
    let layer = shadowObject.layer 
    let radius = shadowObject.frame.size.width/MyConstants.CornerRadius.toRaw(); 
    layer.borderColor = UIColor.whiteColor().CGColor 
    layer.borderWidth = 0.8 
    layer.cornerRadius = radius 
    layer.shadowOpacity = 1 
    layer.shadowRadius = 3 
    layer.shadowOffset = CGSizeMake(2.0,2.0) 
    layer.shadowColor = UIColor.shadowColor().CGColor 
} 

视图扩展视图样式:

extension UIView { 
    func layerborders() { 
     let layer = self.layer 
     let frame = self.frame 
     let myColor = self.backgroundColor 
     layer.borderColor = myColor.CGColor 
     layer.borderWidth = 10.8 
     layer.cornerRadius = layer.borderWidth/MyConstants.CornerRadius.toRaw() 
    } 

    func layerShadow() { 
     let layer = self.layer 
     let frame = self.frame 
     layer.cornerRadius = layer.borderWidth/MyConstants.CornerRadius.toRaw() 
     layer.shadowOpacity = 1 
     layer.shadowRadius = 3 
     layer.shadowOffset = CGSizeMake(2.0,2.0) 
     layer.shadowColor = UIColor.shadowColor().CGColor 
    } 

    func layerGradient() { 
     let layer = CAGradientLayer() 
     let size = self.frame.size 
     layer.frame.size = size 
     layer.frame.origin = CGPointMake(0.0,0.0) 
     layer.cornerRadius = layer.bounds.size.width/MyConstants.CornerRadius.toRaw(); 

     var color0 = CGColorCreateGenericRGB(250.0/255, 250.0/255, 250.0/255, 0.5) 
     var color1 = CGColorCreateGenericRGB(200.0/255, 200.0/255, 200.0/255, 0.1) 
     var color2 = CGColorCreateGenericRGB(150.0/255, 150.0/255, 150.0/255, 0.1) 
     var color3 = CGColorCreateGenericRGB(100.0/255, 100.0/255, 100.0/255, 0.1) 
     var color4 = CGColorCreateGenericRGB(50.0/255, 50.0/255, 50.0/255, 0.1) 
     var color5 = CGColorCreateGenericRGB(0.0/255, 0.0/255, 0.0/255, 0.1) 
     var color6 = CGColorCreateGenericRGB(150.0/255, 150.0/255, 150.0/255, 0.1) 

     layer.colors = [color0,color1,color2,color3,color4,color5,color6] 
     self.layer.insertSublayer(layer, atIndex: 2) 
    } 
} 

实际视图确实加载了功能:

func buttonPress (sender:UIButton!) { 
    NSLog("%@", "ButtonPressed") 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let myLabel = myLabelMaker(myView) 
    let myButton = myButtonMaker(myView) 

    myButton.addTarget(self, action: "buttonPress:", forControlEvents:UIControlEvents.TouchUpInside) 

    viewshadow(myButton) 
    viewshadow(myLabel) 

} 
31

我认为,使用regular expressions来找到应用属性的范围是一种非常方便的方法。我是这样做的:

NSMutableAttributedString *goodText = [[NSMutableAttributedString alloc] initWithString:articleText]; 

NSRange range = [articleText rangeOfString:@"\\[.+?\\]" options:NSRegularExpressionSearch|NSCaseInsensitiveSearch]; 
if (range.location != NSNotFound) { 
    [goodText addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Georgia" size:16] range:range]; 
    [goodText addAttribute:NSForegroundColorAttributeName value:[UIColor brownColor] range:range]; 
} 

NSString *regEx = [NSString stringWithFormat:@"%@.+?\\s", [self.article.titleText substringToIndex:0]]; 
range = [articleText rangeOfString:regEx options:NSRegularExpressionSearch|NSCaseInsensitiveSearch]; 
if (range.location != NSNotFound) { 
    [goodText addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Georgia-Bold" size:20] range:range]; 
    [goodText addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:range]; 
} 

[self.textView setAttributedText:goodText]; 

我正在搜索可用属性的列表,并没有在这里和类引用的第一页中找到它们。所以我决定在这里发布有关这方面的信息。

Standard Attributes

归因串支持文本以下标准属性。如果密钥不在字典中,则使用下面描述的默认值。

NSString *NSFontAttributeName; 
NSString *NSParagraphStyleAttributeName; 
NSString *NSForegroundColorAttributeName; 
NSString *NSUnderlineStyleAttributeName; 
NSString *NSSuperscriptAttributeName; 
NSString *NSBackgroundColorAttributeName; 
NSString *NSAttachmentAttributeName; 
NSString *NSLigatureAttributeName; 
NSString *NSBaselineOffsetAttributeName; 
NSString *NSKernAttributeName; 
NSString *NSLinkAttributeName; 
NSString *NSStrokeWidthAttributeName; 
NSString *NSStrokeColorAttributeName; 
NSString *NSUnderlineColorAttributeName; 
NSString *NSStrikethroughStyleAttributeName; 
NSString *NSStrikethroughColorAttributeName; 
NSString *NSShadowAttributeName; 
NSString *NSObliquenessAttributeName; 
NSString *NSExpansionAttributeName; 
NSString *NSCursorAttributeName; 
NSString *NSToolTipAttributeName; 
NSString *NSMarkedClauseSegmentAttributeName; 
NSString *NSWritingDirectionAttributeName; 
NSString *NSVerticalGlyphFormAttributeName; 
NSString *NSTextAlternativesAttributeName; 

NSAttributedString programming guide

一个完整的类引用是here

+0

感谢列出属性键(很难找到其他) – 2014-12-23 21:42:21

+0

您如何在Swift中做到这一点? – Tom 2015-03-06 22:40:24

14

我写了帮手,轻松添加属性:

- (void)addColor:(UIColor *)color substring:(NSString *)substring; 
- (void)addBackgroundColor:(UIColor *)color substring:(NSString *)substring; 
- (void)addUnderlineForSubstring:(NSString *)substring; 
- (void)addStrikeThrough:(int)thickness substring:(NSString *)substring; 
- (void)addShadowColor:(UIColor *)color width:(int)width height:(int)height radius:(int)radius substring:(NSString *)substring; 
- (void)addFontWithName:(NSString *)fontName size:(int)fontSize substring:(NSString *)substring; 
- (void)addAlignment:(NSTextAlignment)alignment substring:(NSString *)substring; 
- (void)addColorToRussianText:(UIColor *)color; 
- (void)addStrokeColor:(UIColor *)color thickness:(int)thickness substring:(NSString *)substring; 
- (void)addVerticalGlyph:(BOOL)glyph substring:(NSString *)substring; 

https://github.com/shmidt/MASAttributes

您可以通过的CocoaPods安装也:pod 'MASAttributes', '~> 1.0.0'

9

我总是发现,与归属串合作是一个令人难以置信的长篇大论和繁琐的过程。

所以我做了一个Mac App,为你创建所有的代码。

https://itunes.apple.com/us/app/attributed-string-creator/id730928349?mt=12

+0

此处还有一个用于使NSAttributed字符串更容易一些的类别/博文。 http://www.raizlabs.com/dev/2014/03/nsattributedstring-creation-helpers/ – 2014-03-12 21:52:44

10

由于iOS的7,您可以使用NSAttributedString与HTML语法:

NSURL *htmlString = [[NSBundle mainBundle] URLForResource: @"string"  withExtension:@"html"]; 
NSAttributedString *stringWithHTMLAttributes = [[NSAttributedString alloc] initWithFileURL:htmlString 
                         options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType} 
                      documentAttributes:nil 
                         error:nil]; 
textView.attributedText = stringWithHTMLAttributes;// you can use a label also 

你要添加的文件 “string.html” 你凸出,并且HTML的内容可以是像这样:

<html> 
    <head> 
    <style type="text/css"> 
     body { 
     font-size: 15px; 
     font-family: Avenir, Arial, sans-serif; 
     } 
     .red { 
     color: red; 
     } 
     .green { 
     color: green; 
     } 
     .blue { 
     color: blue; 
     } 
    </style> 
    </head> 
    <body> 
    <span class="red">first</span><span class="green">second</span><span class="blue">third</span> 
    </body> 
</html> 

现在,你可以使用NSAttributedString只要你想,即使没有HTML文件,例如像:

//At the top of your .m file 
#define RED_OCCURENCE -red_occurence- 
#define GREEN_OCCURENCE -green_occurence- 
#define BLUE_OCCURENCE -blue_occurence- 
#define HTML_TEMPLATE @"<span style=\"color:red\">-red_occurence-</span><span style=\"color:green\">-green_occurence-</span><span style=\"color:blue\">-blue_occurence-</span></body></html>" 

//Where you need to use your attributed string 
NSString *string = [HTML_TEMPLATE stringByReplacingOccurrencesOfString:RED_OCCURENCE withString:@"first"] ; 
string = [string stringByReplacingOccurrencesOfString:GREEN_OCCURENCE withString:@"second"]; 
string = [string stringByReplacingOccurrencesOfString:BLUE_OCCURENCE withString:@"third"]; 

NSData* cData = [string dataUsingEncoding:NSUTF8StringEncoding]; 

NSAttributedString *stringWithHTMLAttributes = [[NSAttributedString alloc] initWithData:cData 
                       options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType} 
                     documentAttributes:nil 
                        error:nil]; 
textView.attributedText = stringWithHTMLAttributes; 

Source

2

可以在Swift加载HTML属性串如下

var Str = NSAttributedString(
    data: htmlstring.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true), 
    options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], 
    documentAttributes: nil, 
    error: nil) 

    label.attributedText = Str 

从文件

if let rtf = NSBundle.mainBundle().URLForResource("rtfdoc", withExtension: "rtf", subdirectory: nil, localization: nil) { 

    let attributedString = NSAttributedString(fileURL: rtf, options: [NSDocumentTypeDocumentAttribute:NSRTFTextDocumentType], documentAttributes: nil, error: nil) 
     textView.attributedText = attributedString 
     textView.editable = false 
    } 

http://sketchytech.blogspot.in/2013/11/creating-nsattributedstring-from-html.html

加载

和设置字符串,按您的要求的属性....遵循这个..
http://makeapppie.com/2014/10/20/swift-swift-using-attributed-strings-in-swift/

1
- (void)changeColorWithString:(UILabel *)uilabel stringToReplace:(NSString *) stringToReplace uiColor:(UIColor *) uiColor{ 
    NSMutableAttributedString *text = 
    [[NSMutableAttributedString alloc] 
    initWithAttributedString: uilabel.attributedText]; 

    [text addAttribute: NSForegroundColorAttributeName value:uiColor range:[uilabel.text rangeOfString:stringToReplace]]; 

    [uilabel setAttributedText: text]; 

} 
19

该解决方案将适用于任何长度

NSString *strFirst = @"Anylengthtext"; 
NSString *strSecond = @"Anylengthtext"; 
NSString *strThird = @"Anylengthtext"; 

NSString *strComplete = [NSString stringWithFormat:@"%@ %@ %@",strFirst,strSecond,strThird]; 

NSMutableAttributedString *attributedString =[[NSMutableAttributedString alloc] initWithString:strComplete]; 

[attributedString addAttribute:NSForegroundColorAttributeName 
       value:[UIColor redColor] 
       range:[strComplete rangeOfString:strFirst]]; 

[attributedString addAttribute:NSForegroundColorAttributeName 
       value:[UIColor yellowColor] 
       range:[strComplete rangeOfString:strSecond]]; 

[attributedString addAttribute:NSForegroundColorAttributeName 
       value:[UIColor blueColor] 
       range:[strComplete rangeOfString:strThird]]; 


self.lblName.attributedText = attributedString; 
+2

感谢您为我工作 – 2016-06-21 11:48:58

+0

请注意,对于SWIFT,您仍然需要使用NSString,因为范围,请检查此回答:http://stackoverflow.com/a/27041376/1736679 – Efren 2017-05-10 01:42:51

2

我做了一个库,使这个很容易。查看ZenCopy: https://github.com/trifl/ZenCopy

您可以创建Style对象,和/或将它们设置为键以供稍后参考。就像这样:

ZenCopy.manager.config.setStyles { 
    return [ 
     "token": Style(
      color: .blueColor(), // optional 
      // fontName: "Helvetica", // optional 
      fontSize: 14 // optional 
     ) 
    ] 
} 

然后,您可以轻松地构建字符串和他们的风格,并有PARAMS :)

label.attributedText = attributedString(
           ["$0 ".style("token") "is dancing with ", "$1".style("token")], 
          args: ["JP", "Brock"] 
) 

你也可以风格事情正则表达式搜索很容易!

let atUserRegex = "(@[A-Za-z0-9_]*)" 
mutableAttributedString.regexFind(atUserRegex, addStyle: "token") 

这将使用'标记'风格对所有带有'@'的单词进行样式设置。 (例如。@jpmcglone)

我需要仍然得到它的工作瓦特/一切NSAttributedString所提供的,但我想的fontName,fontSize的和颜色覆盖大部分吧。很快会大量更新的:)

我可以帮你开始使用这个,如果你需要的。同时寻找反馈,所以如果它让你的生活更轻松,我会说任务已经完成。

0

为了解决这样那样的斯威夫特被称为Atributika我创建库的问题。

let str = "<r>first</r><g>second</g><b>third</b>".style(tags: 
     Style("r").foregroundColor(.red), 
     Style("g").foregroundColor(.green), 
     Style("b").foregroundColor(.blue)).attributedString 

label.attributedText = str 

你可以在这里https://github.com/psharanda/Atributika

2

发现它与属性串扩展更容易的解决方案。

extension NSMutableAttributedString { 

    // this function attaches color to string  
    func setColorForText(textToFind: String, withColor color: UIColor) { 
     let range: NSRange = self.mutableString.range(of: textToFind, options: .caseInsensitive) 
     self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range) 
    } 

} 

试试这个,看到(在夫特3 & 4测试)

let label = UILabel() 
label.frame = CGRect(x: 120, y: 100, width: 200, height: 30) 
let first = "first" 
let second = "second" 
let third = "third" 
let stringValue = "\(first)\(second)\(third)" // or direct assign single string value like "firstsecondthird" 

let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringValue) 
attributedString.setColorForText(textToFind: first, withColor: UIColor.red) // use variable for string "first" 
attributedString.setColorForText(textToFind: "second", withColor: UIColor.green) // or direct string like this "second" 
attributedString.setColorForText(textToFind: third, withColor: UIColor.blue) 
label.font = UIFont.systemFont(ofSize: 26) 
label.attributedText = attributedString 
self.view.addSubview(label) 

在这里预期的结果:

enter image description here

2

在夫特4:

let string:NSMutableAttributedString = { 

    let mutableString = NSMutableAttributedString(string: "firstsecondthird") 

    mutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.red , range: NSRange(location: 0, length: 5)) 
    mutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.green , range: NSRange(location: 5, length: 6)) 
    mutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue , range: NSRange(location: 11, length: 5)) 
    return mutableString 
}() 

print(string) 
+0

请不要发布相同的答案多个问题。发布一个很好的答案,然后投票/标记以重复关闭其他问题。如果问题不重复,*定制你对问题的回答。* – 2017-10-12 19:22:51

+0

我想在Swift中给出答案。我接受了它的重复。不要期待投票 – 2017-10-12 19:24:11

+0

道歉。我已经删除了答案 – 2017-10-12 19:28:51

0

斯威夫特4

let combination = NSMutableAttributedString() 

var part1 = NSMutableAttributedString() 
var part2 = NSMutableAttributedString() 
var part3 = NSMutableAttributedString() 

let attrRegular = [NSAttributedStringKey.font : UIFont(name: "Palatino-Roman", size: 15)] 

let attrBold:Dictionary = [NSAttributedStringKey.font : UIFont(name: "Raleway-SemiBold", size: 15)] 

let attrBoldWithColor: Dictionary = [NSAttributedStringKey.font : UIFont(name: "Raleway-SemiBold", size: 15), 
           NSAttributedStringKey.foregroundColor: UIColor.red] 

if let regular = attrRegular as? [NSAttributedStringKey : NSObject]{ 
    part1 = NSMutableAttributedString(string: "first", attributes: regular) 

} 
if let bold = attrRegular as? [NSAttributedStringKey : NSObject]{ 
    part2 = NSMutableAttributedString(string: "second", attributes: bold) 
} 

if let boldWithColor = attrBoldWithColor as? [NSAttributedStringKey : NSObject]{ 
    part3 = NSMutableAttributedString(string: "third", attributes: boldWithColor) 
} 

combination.append(part1) 
combination.append(part2) 
combination.append(part3) 

属性列表,请参阅这里NSAttributedStringKey on Apple Docs