bru*_*lla 7 cocoa string-formatting nstextview nsattributedstring
我正在寻找一种可靠的技术来在NSTextView中进行简单的字符串格式化(粗体,斜体,...).文本解析几乎是用正则表达式完成的,但现在我需要应用字体特征并改变大小.
关于如何使文本变粗的一些代码片段
[[textView textStorage] beginEditing];
[[textView textStorage] applyFontTraits:NSFontBoldTrait range:range];
[[textView textStorage] endEditing];
Run Code Online (Sandbox Code Playgroud)
这和尺寸也随之改变
[[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];
Run Code Online (Sandbox Code Playgroud)
工作良好.我现在唯一的问题是,在某些情况下,当我键入新字符时,默认情况下这些字符是粗体或斜体,即使我没有将属性应用于它们.
我是否需要重置与东西setTypingAttributes
的NSTextView
还是我只是错过了一些东西?
我认为你的 set 方法是正确的typingAttributes
。参考-setTypingAttributes:
说
但是,如果您添加任何更改文本属性的用户操作,则该操作应使用此方法来应用这些属性。更改属性的用户操作应始终设置键入属性,因为在下次键入之前可能不会发生后续的选择更改。
这似乎适用于你的情况。
我不知道所描述的行为是否仅适用于 TextEdit 等所见即所得编辑器。您似乎正在处理一些行为与具有语法突出显示的编辑器类似的东西。在那里,您永远不想手动更改文本属性,而是更改语法的结构。它可能不适合这种情况,您应该typingAttributes
根据解析到那里来重置或设置它。