Macos 围绕NSAttributedString的一部分绘制边框

Macos 围绕NSAttributedString的一部分绘制边框,macos,cocoa,draw,core-text,nsattributedstring,Macos,Cocoa,Draw,Core Text,Nsattributedstring,我正在开发一个MacOs应用程序,由于自定义界面,我必须实现自己的搜索功能 所以问题是-如何在NSTextView中围绕NSAttributedString的一部分绘制边框以显示搜索结果(只是在TextEdit应用程序中是如何完成的)。请检查所附图像上所需的外观: [更新] 由于自定义接口要求,我无法使用NSTextViews的setUsesFindBar:和setUsesFindPanel:。该接口有一个自定义NSSearchField,它应该在textView中执行搜索 我已经熟悉了per

我正在开发一个MacOs应用程序,由于自定义界面,我必须实现自己的搜索功能

所以问题是-如何在NSTextView中围绕NSAttributedString的一部分绘制边框以显示搜索结果(只是在TextEdit应用程序中是如何完成的)。请检查所附图像上所需的外观:

[更新]

由于自定义接口要求,我无法使用NSTextViews的
setUsesFindBar:
setUsesFindPanel:
。该接口有一个自定义NSSearchField,它应该在textView中执行搜索


我已经熟悉了performTextFinderAction:,但是如何在具有NSSearchField值的textView上触发它呢?

在interface builder中,您可以设置“Find”属性来控制内置的查找/替换栏的显示位置。要在代码中执行查找操作,请在NSTextView上调用
performFindPanelAction:

对于您想要做的事情,您不需要使用IB或任何查找操作,因为
NSTextView
对象(比如它的名称是
myTextView
)可以完成所有操作。您必须首先创建一系列要突出显示的字符,然后告诉
myTextView

NSRange charRange = NSMakeRange( location length );   // whatever you want
[myTextView showFindIndicatorForRange:charRange];
如果选择在
NSScrollView
中,则此选择应可见。在调用
-showFindIndicator for Range
之前请执行此操作(请参阅
NSTextView
下的文档):

现在是一个扩展,可以显示任意多个高亮显示的字符串。让我们假设我们想要在质数位置标记所有字符。(我不知道这有什么好处,但为什么不呢?)。我们创建一个具有相应范围的NSArray:(伪代码!,范围必须是NSValues!)

现在可以同时选择所有选项:

[myTextView setSelectedRanges:allRanges];
// select the 3th (zero based) entry
[showFindIndicatorForRange:[allRanges objectAtIndex:3];

这是在查找机制中使用的,但它也可以在不使用任何查找过程的情况下工作。

谢谢,也许这就是我需要的。但是,请您证明,由于我在项目中没有使用IB,代码如何解释这一点。有两种方法
setUsesFindBar:
setUsesFindPanel:
,您可以根据您的实现进行适当设置。请查看我的更新问题,谢谢您的关注!答案仍然是使用performFindPanelAction:
performFindPanelAction:
仅将senders标记作为参数来定义要执行的操作类型。如何在文本中找到NSSearchField的值?如前所述,搜索字段不属于查找栏或查找面板。我已经使用子字符串范围来显示findIndicator。如果我们执行
setSelectedRanges:
,则所选范围将获得灰色背景。现在让我们想象一下,我的文本已经有了灰色背景,如图所示。所以在我搜索“a”符号后,所有文本都保持灰色。我想实现的是在搜索词周围有白色矩形,就像在文本编辑中一样。
allRanges = { (1,1) (2,1) (3,1) (5,1) (7,1) etc.}
[myTextView setSelectedRanges:allRanges];
// select the 3th (zero based) entry
[showFindIndicatorForRange:[allRanges objectAtIndex:3];