【发布时间】:2021-08-13 14:19:55
【问题描述】:
我正在尝试使用 textKit 在 swift 中将粗体和斜体应用于 UITextView 中的选定文本。
这是代码:
let isBold = false
if !isActive(modification: .swapBoldWithItalic) || isBold{
storage.setAttributes(attributes, range: range)
} else {
let currentFont = attributes![.font] as? UIFont
let fontDescriptor = currentFont?.fontDescriptor
var changedFontDescriptor: UIFontDescriptor?
if fontDescriptor!.symbolicTraits.contains(.traitItalic) {
changedFontDescriptor = fontDescriptor?.withSymbolicTraits(fontDescriptor!.symbolicTraits.union(.traitItalic))
} else {
changedFontDescriptor = fontDescriptor?.withSymbolicTraits(fontDescriptor!.symbolicTraits.union(.traitBold))
}
var updatedFont: UIFont? = nil
if let changedFontDescriptor = changedFontDescriptor {
updatedFont = UIFont(descriptor: changedFontDescriptor, size: (currentFont?.pointSize)!)
}
let dict = [
NSAttributedString.Key.font: updatedFont,
NSAttributedString.Key.foregroundColor: UIColor.red
]
storage.setAttributes(dict, range: range)
}
我想要实现的是
- 将所选文本更改为粗体或斜体
- 将选定的粗体文本更改为斜体,反之亦然
现在发生的情况是,当我选择文本并将其更改为粗体时,它会变为粗体,但是当我尝试将另一个文本更改为斜体时,它也会变为粗体,我仍然无法从粗体切换到斜体.
【问题讨论】:
-
size: 0.0?你不使用currentFont.pointSize?现在,尚不清楚,文本可以同时是粗体和斜体,还是两者之一? -
它是两者之一,但不会在两者之间交换
-
@Larme 两者都可以,你可以在笔记应用中查看
标签: ios swift uitextview textkit nstextstorage