2017-06-22 63 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

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