我正在寻找一种可靠的技术来在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}}重置某些内容,或者我只是错过了一些内容?
答案 0 :(得分:2)
我认为你设置typingAttributes
的方法是正确的。 Reference for -setTypingAttributes:
says
但是,如果添加任何更改文本属性的用户操作,则操作应使用此方法随后应用这些属性。更改属性的用户操作应始终设置输入属性,因为在下次输入之前可能没有选择的后续更改。
这似乎适用于您的情况。
我不知道所描述的行为是否仅适用于像TextEdit这样的WYSIWYG编辑器。您似乎在处理与具有语法突出显示的编辑器行为相似的内容。你真的不想手动改变文本属性,而是从语法中改变结构。它可能不适合这种情况,您应该重置typingAttributes
或根据解析设置它。