为NSAttributedString的不同部分应用不同的属性

我知道可以将属性应用于NSAttributedString。

但是,我们如何将不同的属性应用于相同的属性string

为string“这是一个归因文本”。

我们如何设置一个特定的属性(背景颜色或前景色)为“这是”另一个属性(背景色或前景色)为“属性文本”。

有什么办法来实现这个….?

还有什么办法可以在iOS中设置NSAttributedString的背景颜色?

制作属性string的可变副本,然后使用以下任一方法:

-setAttributes:范围:
-addAttributes:范围:
-addAttribute:值:范围:
-removeAttributes:范围:

例如,为前四个字母设置一个红色:

NSMutableAttributedString *mutAttrStr = [attributedString mutableCopy]; CGColorRef redClr = [UIColor redColor].CGColor; NSDictionary *newAttributes = [NSDictionary dictionaryWithObject:(id)redClr forKey:(id)kCTForegroundColorAttributeName]; [mutAttrStr addAttributes:newAttributes range:NSMakeRange(0, 4)]; 

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableAttributedString_Class/Reference/Reference.html

在iOS上没有内置的绘制背景颜色的方法。 您可以为该属性创build一个自定义string常量,例如“MyBackgroundColorAttributeName”,然后您必须自己绘制它。

我正在使用下面的扩展名来改变“NSMutableAttributedString”颜色,它很好地做了这个技巧。 它可以用作模板

  extension NSMutableAttributedString { func changeColourOf(_ terms:[String],toThisColour termsColour:UIColor,andForegroundColour fontColour:UIColor) { // Set your foreground Here self.addAttributes([NSForegroundColorAttributeName:fontColour], range:NSMakeRange(0, self.length) ) //Convert "NSMutableAttributedString" to a NSString let string = self.string as NSString //Create a for loop for ther terms array for term in terms { //This will be the range of each term let underlineRange = string.range(of: term) //Finally change the term colour self.addAttribute(NSForegroundColorAttributeName, value: termsColour, range: underlineRange) }}} 

  let someMutableStr = NSMutableAttributedString(string: "Hello World 2017 !") someMutableStr.changeColourOf(["Hello","2017"], toThisColour: .blue, theStringFontColour: .red) 

在这里输入图像说明