关于如何格式化/着色NSTextView字符串的技巧

时间:2012-01-25 20:11:46

标签: cocoa string-formatting nstextview nsattributedstring

我正在寻找一种可靠的技术来在NSTextView中进行简单的字符串格式化(粗体,斜体,...)。文本解析几乎是用正则表达式完成的,但现在我需要应用字体特征并改变大小。

关于如何使文字变为粗体的一些代码片段

[[textView textStorage] beginEditing];
[[textView textStorage] applyFontTraits:NSFontBoldTrait range:range];
[[textView textStorage] endEditing];

这个以及尺寸随着

而变化
[[textView textStorage] beginEditing];  
NSFont* font = [[textView textStorage] attribute:NSFontAttributeName atIndex:range.location effectiveRange:nil];

NSFont* newFont = [NSFont fontWithName:[font familyName] 
                                  size:[font pointSize] + size];

[[textView textStorage] addAttribute:NSFontAttributeName 
                               value:newFont 
                               range:range];
[[textView textStorage] endEditing];

工作正常。我现在唯一的问题是,在某些情况下,当我键入新字符时,默认情况下这些字符是粗体或斜体,即使我没有将属性应用于它们。

我是否必须使用setTypingAttributes的{​​{1}}重置某些内容,或者我只是错过了一些内容?

1 个答案:

答案 0 :(得分:2)

我认为你设置typingAttributes的方法是正确的。 Reference for -setTypingAttributes: says

  

但是,如果添加任何更改文本属性的用户操作,则操作应使用此方法随后应用这些属性。更改属性的用户操作应始终设置输入属性,因为在下次输入之前可能没有选择的后续更改。

这似乎适用于您的情况。

我不知道所描述的行为是否仅适用于像TextEdit这样的WYSIWYG编辑器。您似乎在处理与具有语法突出显示的编辑器行为相似的内容。你真的不想手动改变文本属性,而是从语法中改变结构。它可能不适合这种情况,您应该重置typingAttributes或根据解析设置它。