【发布时间】:2019-11-28 15:12:37
【问题描述】:
我正在尝试创建一个带有“加粗”功能的简单按钮,就像在 Apple Notes 应用程序中一样。这将:
- 如果选择文本,则选择粗体或非粗体。
- 如果未选择任何文本,则更改当前的书写属性以及按钮的图标以表示您是否以粗体输入。
我无法解决第 2 部分的问题。我该如何解决和更改当前 UITextView 的书写属性?
func textViewDidChangeSelection(_ textView: UITextView) {
selectedRange = noteContents.selectedRange
}
func bold() {
let attributedString = NSAttributedString(attributedString: noteContents.attributedText)
if let textRange = selectedRange {
//If text is NOT selected
switch textRange.length {
case 0:
//Work out current writing attributes and change them
default:
//If text IS selected
print("Selected")
print(textRange.length)
//Enumerate all the fonts in the selectedRange
attributedString.enumerateAttribute(.font, in: textRange, options: []) { (font, range, pointee) in
let newFont: UIFont
if let font = font as? UIFont {
var fontTraits = font.fontDescriptor.symbolicTraits
//If selected text contains Bold
if fontTraits.contains(.traitBold) {
fontTraits.remove([.traitBold])
let fontAtrDetails = font.fontDescriptor.withSymbolicTraits(fontTraits)
newFont = UIFont(descriptor: fontAtrDetails!, size: font.pointSize)
} else {
//If selected text does not contain Bold
fontTraits.insert([.traitBold])
let fontAtrDetails = font.fontDescriptor.withSymbolicTraits(fontTraits)
newFont = UIFont(descriptor: fontAtrDetails!, size: font.pointSize)
}
noteContents.textStorage.addAttributes([.font : newFont], range: textRange)
}
}
}
}
}
【问题讨论】:
-
我记得textview有typingAttributes,你可以在飞行中更改它们
-
@AlexandrKolesnik 如何更改类型属性?
-
smth like this textView.typingAttributes = [.font: UIFont.boldSystemFont(ofSize: 16)]
标签: ios swift uitextview