我需要使用 UITextView 實作一個文本編輯器,它支持:
- 粗體/斜體/下劃線
- 顏色,字體,字體大小變化
- 段落對齊
- 串列格式(專案符號、數字等)
- 在文本視圖中的任意位置自定義選擇文本并更改屬性
到目前為止,我已經設法在沒有 NSTextStorage 的情況下做到了,但似乎我已經達到了極限。例如,要更改字體,我使用 UIFontPickerViewController 并按如下方式更改字體:
func fontPickerViewControllerDidPickFont(_ viewController: UIFontPickerViewController) {
if let selectedFontDesc = viewController.selectedFontDescriptor {
let font = UIFont(descriptor: selectedFontDesc, size: selectedFontDesc.pointSize)
self.selectedFont = font
self.textView.typingAttributes = [NSAttributedString.Key.foregroundColor: self.selectedColor ?? UIColor.white, NSAttributedString.Key.font: self.selectedFont ?? UIFont.preferredFont(forTextStyle: .body, compatibleWith: nil)]
if let range = self.textView.selectedTextRange, let selectedFont = selectedFont {
let attributedText = NSMutableAttributedString(attributedString: self.textView.attributedText)
let location = textView.offset(from: textView.beginningOfDocument, to: range.start)
let length = textView.offset(from: range.start, to: range.end)
let nsRange = NSRange(location: location, length: length)
attributedText.setAttributes([NSAttributedString.Key.font : selectedFont], range: nsRange)
self.textView.attributedText = attributedText
}
}
}
這可行,但問題是它會重置所選文本和其他屬性的顏色。我需要了解一種不干擾所選文本的現有屬性的方式。我懷疑這樣做的方法是使用 NSTextStorage 但我在互聯網上找不到任何好的東西來解釋正確使用 NSTextStorage 來實作這一點。
uj5u.com熱心網友回復:
問題是這個電話:
attributedText.setAttributes...
正如您所觀察到的,這使得您提供的屬性(此處為字體)成為此范圍的唯一屬性。相反,您希望將字體屬性添加到現有屬性:
https://developer.apple.com/documentation/foundation/nsmutableattributedstring/1414304-addattributes
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/480816.html
