如何禁用NSTextView中的LookUp(Dictionary,Thesaurus,Wikipedia)功能?

Mic*_*ann 15 macos nstextview quicklook appkit osx-lion

我的一个项目是一个测试应用程序,学生在打字时不应该轻易查找单词.

通过setContinuousSpellCheckingEnabled:和关闭NSTextView中的自动拼写检查相对容易setAutomaticSpellingCorrectionEnabled:.

我刚刚发现,对于学生来说,只需用三根手指点击任何应用程序中的任何选定单词即可轻松弹出一个包含字典,词库甚至是维基百科条目的有用窗口,如果可以在那里找到该单词.

查找功能是什么样的

这是99%的MacOS应用程序的强大功能,但不适合我的测试应用程序.

现在几个月后,Apple为我提供了一个(无证件和微妙的)解决方案,仅适用于10.8,我最终可能会在下面的答案中提供它,但我需要一个适用于10.7的解决方案(其中是这个功能的来源).

对这个问题有三种可能的攻击计划,但我不确定如何处理这三种问题中的任何一种:

1)

我需要阻止此查找功能在此文本视图中发生.

2)

我已经尝试删除字典首选项(如果它们存在;如果用户从未打开Dictionary.app,没有首选项)和字典缓存文件(在" ~/Library/Cache"中,但这似乎没有改善情况.

3)

或者有没有办法能够检测到"在执行三指点击时使用查找"的"触控板"设置?它可能在某些com.apple.*.plist某处或可通过" defaults" 检测到但是我不确定在哪里.

编辑:

只剩下一点时间来希望解决这个问题并奖励一笔赏金.这是我尝试使用" defaults"的方法:

defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerTapGesture -bool false
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerDoubleTapGesture -bool false
Run Code Online (Sandbox Code Playgroud)

但我并不是100%肯定这些是键入的正确手势/关键字.即使在输入后(并验证它们是通过" defaults read com.apple.driver.AppleBluetoothMultitouch.trackpad" 正确保存),字典LookUp窗口仍然会出现.

现在这里唯一可行的,但它只适用于MacOS 10.8(这是暴露/引入这些方法的地方).只需在NSTextView子类中覆盖这两个方法:

- (void)quickLookWithEvent:(NSEvent *)event;
- (void)quickLookPreviewItems:(id)sender;
Run Code Online (Sandbox Code Playgroud)

Ken*_*ses 5

我怀疑字典查找是通过两种方式之一实现的,作为服务或通过NSTextInputClient协议。因此,我将-validRequestorForSendType:returnType:在您的文本子类中进行覆盖,以查看它是否被三指点击调用。无论如何,听起来您希望为您的应用程序返回NO所有服务。您还应该覆盖writeSelectionToPasteboard:types:以返回NO

如果没有这样做,请尝试覆盖 的方法NSTextInputClient以查看它们是否被调用。特别是,-attributedString-attributedSubstringForProposedRange:actualRange:方法将是字典查找如何获取文本。让这两个都返回nil应该会阻止它工作。请注意,该NSTextInputClient协议对于输入法的使用以及对带有重音和变音符号的字符的按住访问至关重要,因此您可能会破坏它。我不知道您是否能够区分来自普通输入法的请求与来自字典查找手势的请求。

如果所有其他方法都失败了,您可以实现自定义文本视图而不是使用NSTextView. 这不是微不足道的,但您将完全控制其行为。