Применение разных атрибутов для разных частей NSAttributedstring - PullRequest
3 голосов
/ 15 декабря 2011

Я знаю, что можно применить атрибуты к NSAttributedString.

Но как мы можем применить различные атрибуты к одной и той же приписанной строке.

для строки "Это приписанный текст".

Как мы можем установить определенный атрибут (цвет фона или цвет переднего плана) на «Это», другой атрибут (цвет фона или цвет переднего плана) на «приписанный текст».

Есть ли какой-либоспособ достижения этого ....?

Также есть ли способ установить цвет фона NSAttributedString в iOS?

Ответы [ 2 ]

4 голосов
/ 16 декабря 2011

Создайте изменяемую копию приписанной строки, а затем используйте:

-setAttributes: диапазон:
-addAttributes: range:
-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. Вы можете создать пользовательскую строковую константу для атрибута, например, «MyBackgroundColorAttributeName», а затем вам придется нарисовать ее самостоятельно.

2 голосов
/ 18 февраля 2017

Я использую следующее расширение, чтобы изменить цвет «NSMutableAttributedString», и это хорошо сработало. Может использоваться как шаблон

extension NSMutableAttributedString {

    func changeColourOf(_ terms: [String], toThisColour termsColour: UIColor, 
                        andForegroundColour fontColour: UIColor) {

        // Set your foreground Here
        addAttributes([NSAttributedString.Key.foregroundColor : 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
            addAttribute(NSAttributedString.Key.foregroundColor, 
                         value: termsColour, 
                         range: underlineRange)
        }
    }
}

Пример:

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

enter image description here

...