如何格式化/着色 NSTextView 字符串的技术

2024-01-07

我正在寻找一种可靠的技术来在 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 of the NSTextView或者我只是想念这里的一些东西?


我认为你的设置方法是正确的typingAttributes. 参考-setTypingAttributes: says https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSTextView_Class/Reference/Reference.html#//apple_ref/occ/instm/NSTextView/setTypingAttributes%3a

但是,如果您添加任何更改文本属性的用户操作,则该操作应使用此方法来应用这些属性。更改属性的用户操作应始终设置键入属性,因为在下次键入之前可能不会发生后续的选择更改。

这似乎适用于你的情况。

我不知道所描述的行为是否仅适用于 TextEdit 等所见即所得编辑器。您似乎正在处理一些行为与具有语法突出显示的编辑器类似的东西。在那里,您永远不想手动更改文本属性,而是更改语法的结构。它可能不适合这种情况,你应该重置typingAttributes或者根据解析到那里进行设置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何格式化/着色 NSTextView 字符串的技术 的相关文章

随机推荐