например. Например, у нас есть строка NSAttributed, и нам нужно разделить строку и атрибуты, а затем использовать эти атрибуты в другой строке той же длины.
Как отделить атрибуты от NSAttributed String и применить эти атрибуты к другой строке?
Ответы (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.
Вы должны взглянуть на этот метод из NSAttributedString
attributesAtIndex(location: Int, effectiveRange range: NSRangePointer) -> [String : AnyObject]
Вызвав этот метод в NSAttributedString, вы получите все атрибуты, примененные в диапазоне. Просто укажите всю строку как диапазон. А затем создайте новую строку атрибутов с этими атрибутами.