在NSTextView中选择文本后,AttributedString下标将丢失字体样式

时间:2015-05-09 16:44:45

标签: nstextview nsmutableattributedstring

我的NSMutableAttributedString中有两种NSTextView种文字样式。一种是字体样式,另一种是上标,使用下面显示的NSBaselineOffsetAttributeName

aVerseNumberMutableString = NSMutableAttributedString(string: verseNumber.description, 
   attributes: [NSBaselineOffsetAttributeName:NSNumber(double: 6.0), NSFontAttributeName:NSFont(name: "Georgia", size: 12.0)!])

它们完美运行,直到我在NSTextView中选择文字,然后触发NSTextView以使用NSPopUpButton更改其文字。然后上标字体样式恢复为其他文本的样式。以下是所有代码行。

// Get the verse number and then add attributes
aVerseNumberMutableString = NSMutableAttributedString(string: verseNumber.description, 
    attributes: [NSBaselineOffsetAttributeName:NSNumber(double: 6.0), NSFontAttributeName:NSFont(name: "Georgia", size: 12.0)!])

// Get the verse and then add attributes
aVerseMutableString = NSMutableAttributedString(string: " " + book.verseText + "  ", attributes: [NSFontAttributeName:NSFont(name: "Georgia", size: 20.0)!])

// Prepend the verse number to the verse
theContent.appendAttributedString(aVerseNumberMutableString)
theContent.appendAttributedString(aVerseMutableString)

我可以看到这可能是怎么发生的,因为我将这两个字符串附加在一起,但为什么只有当我选择文本然后触发内容在NSTextView中更改时才会发生这种情况?

Video of the problem. Just look at the first superscript as I change the content before selecting text and after selecting text.

1 个答案:

答案 0 :(得分:1)

问题不在于创建属性字符串。这是我用NSTextView填充内容的方式。我正在使用

删除视图中的文本
contentTextView.textStorage!.mutableString.setString("")

然后使用

填写它
 contentTextView.insertText(getChapterText("1"))

我应该使用NSTextStorage来完成所有操作。所以现在我用一行代码而不是两行代码。

contentTextView.textStorage!.setAttributedString(getChapterText("1"))

现在选择文本,甚至只是在文本视图中单击,都不会像以前那样改变文本的样式。