NSTextFinder对NSTextView的操作

时间:2011-08-25 23:36:44

标签: macos cocoa osx-mountain-lion nstextview

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

我的-(void)performTextFinderAction:(id)sender覆盖会调用show动作,但是对于下一个查找,找到之前的等等,它不会被调用。

有什么想法吗?

谢谢!

编辑:

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

这是为什么?

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

2 个答案:

答案 0 :(得分:2)

查找栏与客户端的NSTextFinder私密通信,而不是调用NSResponder的-performTextFinderAction :.当客户端以外的东西具有关键焦点时,这对于允许查找起作用是必要的。

你想要完成什么?

答案 1 :(得分:2)

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

我找到了解决方案。

转到您的笔尖进入主菜单,然后选择"查找" (和相关的)菜单项。它们应绑定到名为" performFindPanelAction的默认操作:。"现在取消绑定它们并绑定到" performTextFinderAction:"而是第一响应者。

您可能无法在First Responder的动作列表中找到该动作。因此,您需要在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