更新属性字符串而不丢失以前的格式

时间:2020-08-24 11:07:50

标签: swift nsattributedstring nsmutableattributedstring attributed

我第一次使用属性字符串,所以请多多包涵!

我花了很多时间在SO上寻找各种归因于字符串的答案,但我仍然不相信自己在做正确的事情,并且希望得到任何建议。

我创建了一个NSMutableAttributed字符串(var attributedText)和一个带有TextView和2个按钮的简单UIView,从理论上讲应该将UITextView中突出显示的文本的任何部分变为粗体或斜体。

在ViewDidLoad中,我仅添加了一些虚拟文本,并为文本添加了一些属性,例如行距和字体颜色。当视图出现时,所有外观均符合预期。

如果我突出显示文本的一部分并点击加粗按钮,它将返回一个属性,并将其添加到attributedText,然后添加到textView(textView.attributedText = attributedText)。

以下是我的返回函数:

func boldText() -> Dictionary<NSAttributedString.Key, Any>  {
    let attributes: [NSAttributedString.Key: Any] = [
        .font: UIFont.systemFont(ofSize: 15, weight: .bold),
    ]
    return attributes
}

现在,这是令人困惑的地方。如果我在UTextView中手动键入一些文本并突出显示该文本的一部分并点击Bold按钮,则该应用将由于文本超出范围而崩溃,这是有道理的,因为我的attributedText变量仅保存了我之前的虚拟文本添加到ViewDidLoad中,而不是我输入的新文本。

所以我的问题是,如何在不弄乱该文本已包含的所有其他格式的情况下,将输入的新文本添加到attributedText变量中? 如果我只是将textView文本添加到变量中:

attributedText = NSMutableAttributedString(string: "\(textView.text!)" )

那么显然,它只会覆盖先前在attributedText变量中保留的所有内容,从而删除所有格式。

我是否应该每次在textView中进行更改时都需要正确地更新我的attributedText变量,还是应该完全使用其他方法呢?

0 个答案:

没有答案