3

我正在尝试捕获NSTextFinderClient自定义子类上的所有调用NSTextView

在我的覆盖上调用了显示操作-(void)performTextFinderAction:(id)sender,但对于查找下一个、查找上一个等,它不会被调用。

有任何想法吗?

谢谢!

编辑:

如果您创建一个新项目并NSTextView从界面构建器中拖动一个,当查找栏是第一响应者时,command-g 和 command-shift-g(查找下一个并查找上一个)不起作用。

为什么是这样?

我需要一个自定义子类NSTextView来响应每个事件的查找栏。

4

2 回答 2

3

我在 Apple 的 TextEdit 源代码中进行了搜索,因为使用 TextEdit,文本视图中的标准搜索栏适用于 command-G(和其他快捷方式),即使搜索字段是第一响应者。

我找到了解决方案。

转到主菜单的笔尖,然后选择“查找”(和相关)菜单项。它们应该绑定到名为“performFindPanelAction:”的默认操作。现在解开它们并绑定到 First Responder 的“performTextFinderAction:”。

您可能在第一响应者的操作列表中找不到该操作。因此,您需要在 First Responder 的属性检查器窗格中自己添加它。

这是以下文件的意思

在 OS X v10.7 之前,这些菜单项的默认操作是 performFindPanelAction:。只要有可能,您应该更新您的实现以使用此新操作。

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSResponder_Class/#//apple_ref/occ/instm/NSResponder/performTextFinderAction

于 2015-10-21T11:00:39.513 回答
2

查找栏与客户端的 NSTextFinder 私下通信,而不是调用 NSResponder 的 -performTextFinderAction:。当客户端以外的某些东西具有关键焦点时,这是允许 find 工作的必要条件。

你想达到什么目的?

于 2011-08-26T01:16:38.660 回答