gpt4 book ai didi

cocoa - NSTextView + NSTextFinder + 我单独的 NSSearchField

转载 作者:行者123 更新时间:2023-12-03 16:21:58 43 4
gpt4 key购买 nike

我正在尝试使用来 self 的自定义 NSSearchField 的搜索查询在 NSTextView 中实现搜索。

听起来很简单,但我无法让它工作。

到目前为止,我已经浏览了所有有关 NSTextFinder、其客户端和 FindBarContainer 的 Apple 文档。 TextFinder 只是向容器提供 FindBarView,当您激活搜索时容器会显示它。

客户端、容器和 TextFinder 之间的所有通信都是隐藏的。它看起来就像一个黑匣子,旨在“按原样”工作,无需任何定制或干扰。

但是 NSTextFinder 的 - (void)performAction:(NSTextFinderAction)op 方法呢?不是为了向 TextFinder 发送自定义命令吗?

我试图使用以下内容为其分配一个新的搜索字符串:

    NSPasteboard* pBoard = [NSPasteboard pasteboardWithName:NSFindPboard];
[pBoard declareTypes:[NSArray arrayWithObjects:NSPasteboardTypeString, NSPasteboardTypeTextFinderOptions, nil] owner:nil];
[pBoard setString:_theView.searchField.stringValue forType:NSStringPboardType];
NSDictionary * options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSTextFinderCaseInsensitiveKey,
[NSNumber numberWithInteger:NSTextFinderMatchingTypeContains], NSTextFinderMatchingTypeKey,
nil];

[pBoard setPropertyList:options forType:NSPasteboardTypeTextFinderOptions];

[textFinder performAction:NSTextFinderActionSetSearchString];

但这不起作用,只会破坏正常的 findBar 操作。

我有一种强烈的感觉,我做错了什么。我想要的只是在我自己的 NSSearchField 中拥有标准搜索功能。这可能吗?

我敢打赌我不是第一个对普通 findBar 不满意的人。

非常需要并感谢您的帮助!

最佳答案

对于 NSTextView 来说,NSTextFinder 主要只是 NSString 的 func range(of searchString: String, options mask: NSString.CompareOptions = [], range rangeOfReceiverToSearch: NSRange) -> NSRange 的用户界面。

如果您想在 NSTextView 上实现自己的搜索,请使用它。要向前搜索,您可以构建一个范围,从当前选择范围的末尾开始,一直到 NSTextView 文本的末尾。要向后搜索,请构造一个从 0 开始到当前选择范围的开头的范围,并告诉 NSString 使用向后搜索。

如果 NSString 返回 .notFound 范围,请自行实现环绕。

如果您需要 startsWithendsWithwholeWord,您需要获取 NSString 的 func 给您的结果,检查是否它就可以了,如果不行,调整范围并再次调用。

关于cocoa - NSTextView + NSTextFinder + 我单独的 NSSearchField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24724629/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com