Как отделить атрибуты от NSAttributed String и применить эти атрибуты к другой строке?

например. Например, у нас есть строка NSAttributed, и нам нужно разделить строку и атрибуты, а затем использовать эти атрибуты в другой строке той же длины.


person Pankaj Bhardwaj    schedule 26.05.2016    source источник
comment
Не могли бы вы привести пример вашего ожидаемого ввода и ожидаемого результата?   -  person Mike Zavarello    schedule 26.05.2016


Ответы (2)


NSAttributedString может иметь разные атрибуты для разных диапазонов строки.

Чтобы извлечь эти атрибуты, вы можете использовать метод enumerateAttributesInRange.

Подготавливаем массив кортежей для хранения результатов:

var extractedAttributes = [(attributes: [String:AnyObject], range: NSRange)]()

Каждый кортеж будет содержать атрибуты для определенного диапазона в NSAttributedString.

Теперь мы перебираем NSAttributedString и заполняем массив результатами:

attributedString.enumerateAttributesInRange(NSRange(location: 0, length: attributedString.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (dict, range, stopEnumerating) in
    extractedAttributes.append((attributes: dict, range: range))
}

После заполнения массива вы можете получить доступ к его содержимому:

for item in extractedAttributes {
    print(item.attributes)
    print(item.range)
}

И оттуда у вас есть все необходимое для создания новых строк с атрибутами с этими атрибутами: у вас есть диапазон и соответствующие атрибуты для каждого из них в NSAttributedString.

person Eric Aya    schedule 26.05.2016

Вы должны взглянуть на этот метод из NSAttributedString

attributesAtIndex(location: Int, effectiveRange range: NSRangePointer) -> [String : AnyObject]

Вызвав этот метод в NSAttributedString, вы получите все атрибуты, примененные в диапазоне. Просто укажите всю строку как диапазон. А затем создайте новую строку атрибутов с этими атрибутами.

person Pavel Gatilov    schedule 26.05.2016