2011-12-15 12 views
3

NSAttributedStringに属性を適用することは可能です。NSAttributedstringの異なる部分に異なる属性を適用する

しかし、同じ帰属文字列に異なる属性をどのように適用できますか。

"This is an attributed text"という文字列です。

特定の属性(背景色または前景色)を「これは」 「属性付きテキスト」の別の属性(背景色または前景色)に設定できますか?

これを達成する方法はありますか?

iOSでNSAttributedStringの背景色を設定する方法はありますか?

答えて

4

属性付き文字列の変更可能なコピーを作成し、その後、いずれかを使用:

-setAttributes:範囲:
-addAttributes:範囲:
-addAttribute:値:範囲:
-removeAttributes:範囲:

例えば、最初の4つの文字の赤色を設定する:

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に背景色を描画する組み込みの方法はありません。属性のカスタム文字列定数、たとえば "MyBackgroundColorAttributeName"を作成することができます。次に、それを自分で描画する必要があります。

+0

感謝を使用することができます。それは働いた。 – Arun

+0

アプリケーションの終了:[__NSCFString addAttributes:range:]:認識できないセレクタがインスタンスに送信されました...どうしたのですか? – Morkrom

+0

@Morkrom - おそらく手遅れですが、 'addAttributes:range:'を 'NSMutableAttributedString'以外のものに送信しています(おそらく' NSString'のようですが、 。) – ArtOfWarfare

2

"NSMutableAttributedString"の色を変更するために次の拡張子を使用していますが、そのトリックはうまくいきました。これは、テンプレートとしてwekwaたくさん

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) 

enter image description here

関連する問題