например. Как и у нас есть строка NSAttributed, и нам нужно отделить строку и атрибуты, а затем использовать эти атрибуты на другой строке той же длины.Как отделить атрибуты от строки NSAttributed String и применить эти атрибуты к другой строке?
ответ
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 вы будете получать все атрибуты, применяемые в диапазоне. Просто укажите всю строку как диапазон. А затем создайте новую строку атрибутов с этими атрибутами.
Можете ли вы привести пример ожидаемого ввода и ожидаемого результата? –