2016-05-26 9 views
2

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

+0

Можете ли вы привести пример ожидаемого ввода и ожидаемого результата? –

ответ

1

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.

0

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

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

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