Cocoa 在NStextField中绘制

Cocoa 在NStextField中绘制,cocoa,substring,highlighting,nsview,nstextfield,Cocoa,Substring,Highlighting,Nsview,Nstextfield,如果您想在NSTextField中实现特定子字符串的高亮显示,如屏幕截图(Tweetie.app)中所示,您将如何实现此操作?:) 谢谢你的帮助 对于NSTextField,请注意,它是一个NSTextFieldCell,用于绘制图形。您需要覆盖-drawInteriorWithFrame:inView:并自己绘制字符串。挑战在于找到绘制子字符串的矩形(如果范围被包装,则不止一个)。您将不得不使用NSLayoutManager和NSTextStorage容器 最好使用NSTextView。关联

如果您想在
NSTextField
中实现特定子字符串的高亮显示,如屏幕截图(Tweetie.app)中所示,您将如何实现此操作?:)


谢谢你的帮助

对于NSTextField,请注意,它是一个NSTextFieldCell,用于绘制图形。您需要覆盖-drawInteriorWithFrame:inView:并自己绘制字符串。挑战在于找到绘制子字符串的矩形(如果范围被包装,则不止一个)。您将不得不使用NSLayoutManager和NSTextStorage容器

最好使用NSTextView。关联的NSLayoutManager和NSTextStorage组件已经预装配,您可以免费获得许多其他功能。最重要的是,有一个方便的-[NSTextView drawViewBackgroundInRect:]方法,因此您不必对任何内容进行子类化。您只需向文本视图请求其布局管理器和文本存储,然后向其请求给定范围的矩形。有关详细信息,请参阅和链接的文档


为了有效地找到感兴趣的子字符串,您可以对感兴趣的范围使用(或内置的子字符串,如NSLinkAttributeName)。

对于NSTextField,请注意它是一个NSTextFieldCell,负责绘制。您需要覆盖-drawInteriorWithFrame:inView:并自己绘制字符串。挑战在于找到绘制子字符串的矩形(如果范围被包装,则不止一个)。您将不得不使用NSLayoutManager和NSTextStorage容器

最好使用NSTextView。关联的NSLayoutManager和NSTextStorage组件已经预装配,您可以免费获得许多其他功能。最重要的是,有一个方便的-[NSTextView drawViewBackgroundInRect:]方法,因此您不必对任何内容进行子类化。您只需向文本视图请求其布局管理器和文本存储,然后向其请求给定范围的矩形。有关详细信息,请参阅和链接的文档


为了有效地找到感兴趣的子字符串,您可以使用(或内置的子字符串,如NSLinkAttributeName)对于你感兴趣的范围。

< P>一个可供选择的是一个可编辑的WebVIEW,在这里你可以用CSS来构建自定义属性。

< P>一个可供选择的替代方案是一个可编辑的WebVIEW,在那里你可以用CSS来构建自定义属性。你可以做得比从Aaron Hillegass谈论它的视频开始更糟糕:它会,不是吗?:-)不幸的是,它的长度不能减少到堆栈溢出友好的长度。这里有一些例子——试试cocoadev.com和通常友好的搜索引擎。关键词提示:NSLayoutManager,glyph范围,nstextview缺点GroundInRect:…嗯。。。让我重新表述一下:它可能可以归结为基本内容,并且“足够简短”,但在这种情况下,一个功能完整的示例要好得多。这不是“轻松”的材料。如果你想把你的头绕到文本系统上,你可能会比从Aaron Hillegass谈论它的视频开始做得更糟:它会,不是吗?:-)不幸的是,它的长度不能减少到堆栈溢出友好的长度。这里有一些例子——试试cocoadev.com和通常友好的搜索引擎。关键词提示:NSLayoutManager,glyph范围,nstextview缺点GroundInRect:…嗯。。。让我重新表述一下:它可能可以归结为基本内容,并且“足够简短”,但在这种情况下,一个功能完整的示例要好得多。这不是“轻”材质。这确实需要找到给定范围和自定义图形的矩形,但对我来说似乎有点重。如果使用自定义属性,则将属性(在本例中为标记)分配到所需的范围也需要更多的努力。根据OP的目标,“什么是最好的”可以走任何一条路,但两边都有很多缺点。(空间不足)。为自定义属性分配范围相对容易,但多种类型的自定义属性现在需要区分范围类等。这是一个额外的层。此外,与Cocoa文本系统相比,在文档中定位和操作此标记需要花费更多的精力(IMO)。这确实解决了查找给定范围和自定义图形的矩形的需要,但对我来说似乎有点沉重。如果使用自定义属性,则将属性(在本例中为标记)分配到所需的范围也需要更多的努力。根据OP的目标,“什么是最好的”可以走任何一条路,但两边都有很多缺点。(空间不足)。为自定义属性分配范围相对容易,但多种类型的自定义属性现在需要区分范围类等。这是一个额外的层。此外,与Cocoa文本系统相比,在文档中定位和操作此标记需要更多的努力(IMO)。