我正在开发一个MacOs应用程序,由于自定义界面,我必须实现自己的搜索功能。
所以问题是 - 如何在NSTextView中围绕NSAttributedString的一部分绘制边框以显示搜索结果(在TextEdit应用程序中如何完成)。请在附图上查看所需的外观:
[UPDATE]
由于自定义界面要求,我无法使用NSTextViews的setUsesFindBar:
和setUsesFindPanel:
。该接口有一个自定义NSSearchField,它应该在textView中执行搜索。
我熟悉performTextFinderAction:
,但如何在带有NSSearchField值的textView上触发它呢?
答案 0 :(得分:2)
对于您想要做的事情,您不需要使用IB或任何查找操作,因为NSTextView
对象(假设其名称为myTextView
)可以完成所有操作。您必须先创建一个要突出显示的字符范围,然后告诉myTextView
执行此操作:
NSRange charRange = NSMakeRange( location length ); // whatever you want
[myTextView showFindIndicatorForRange:charRange];
如果选择在NSScrollView
范围内,则此选择应该可见。在致电-showFindIndicatorForRange
之前执行此操作(请参阅NSTextView
下的文档):
NSLayoutManager *layout = [myTextView layoutManager];
NSRect rect = [layout boundingRectForGlyphRange:charRange
inTextContainer:[myTextView textContainer] ];
[myTextView scrollRectToVisible:rect];
现在是一个扩展,可以根据需要显示多个突出显示的字符串。让我们假设我们想要在素数位置标记所有字符。 (我不知道那会有什么好处,但为什么不呢?)。我们创建一个具有相应范围的NSArray :( 伪代码!,范围必须是NSValues!)
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];
这在查找机制中使用,但它也可以不使用任何查找过程。
答案 1 :(得分:0)
在界面构建器中,您可以设置“查找”属性以控制显示内置查找/替换栏的位置。要在代码中执行查找操作,请在NSTextView上调用performFindPanelAction:
。