2017-06-22 57 views
2

我有一個包含多個段落的textview。每個字符串的格式可以不同,例如某些字符串是粗體字,而其他字體則使用斜體字體。Swift 3獲取textview子字符串的屬性

我將如何得到一個特定的子屬性,並獲得屬性的一個前的子字符串?

比如我想獲得選定文本,以及被之前顯示的文本的屬性。

這是我到目前爲止。

let range: UITextRange = textView.selectedTextRange! 
let selectedText = textTV.text(in: range) 
let previousRange: UITextRange = textView.textRange(from: textView.beginningOfDocument, to: range.start)! 
let previousText = textTV.text(in: previousRange) 

這樣我就可以得到用戶選擇的字符串。以及它背後的文字。

但是我不知道如何來rip串出的屬性。

+0

使用文本視圖的'attributedText'財產。 – rmaddy

+0

這將返回整個textview的屬性文本不是嗎?我需要獲取多個屬性文本屬性,因爲每個字符串可以具有彼此不同的屬性。 – mocode10

+0

然後,您可以使用'attributedSubstring'來獲得所需的部分。 – rmaddy

回答

2

您可以枚舉屬性和應用這些新文本:

textView.attributedText.enumerateAttributes(in: textView.selectedRange, options: .longestEffectiveRangeNotRequired) { (attributes, range, stop) in 
    // do what you need 
} 

說明:

執行的範圍內的每個屬性的塊。如果此方法是 發送到NSMutableAttributedString,突變(缺失, 此外,或變化)的一個實例是允許的,只要它是提供給塊中的範圍內 ;突變後,枚舉繼續 與之後的處理後立即範圍的範圍內,所述 長度的處理範圍被調整爲突變之後。 ( 枚舉器基本上假定長度發生在指定範圍內的任何長度變化)。例如,如果在位置N處開始以範圍 調用塊,並且塊將刪除提供的範圍中的所有字符,則下一次調用也將通過N作爲 範圍的指數。

+0

這是超級有用的。絕對是一個正確的方向。 – mocode10

+0

不客氣。如果真的有用,請投票支持:) –