17

私のプロジェクトの1つは、生徒が入力中に単語を簡単に検索できないようにするテストアプリです。

setContinuousSpellCheckingEnabled:およびを介してNSTextViewで自動スペルチェックをオフにするのは比較的簡単setAutomaticSpellingCorrectionEnabled:です。

アプリで選択した単語を3本の指でタップするだけで、辞書、シソーラス、さらにはWikipediaのエントリが含まれている便利なウィンドウがポップアップ表示されるのは、学生にとって非常に簡単なことです。

ルックアップ機能はどのように見えるか

これは、MacOSアプリの99%にとっては優れた機能ですが、私のテストアプリには適していません。

数か月後、Appleは10.8でのみ機能する(文書化されていない微妙な)ソリューションを提供してくれました。最終的には以下の回答で提供する可能性がありますが、10.7でも機能するソリューションが必要です(この機能が登場したのはここです)。

この問題に対する攻撃の計画は3つありますが、これら3つのいずれかにアプローチする方法がわかりません。

1)

このルックアップ機能がこのテキストビューで発生しないようにブロックする必要があります。

2)

辞書の設定(存在する場合。ユーザーがDictionary.appを開いたことがない場合、設定はありません)と辞書のキャッシュファイル( " ~/Library/Cache"内)を削除しようとしましたが、状況は改善されないようです。

3)

または、「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

しかし、これらが入力する正しいジェスチャ/キーワードであるかどうかは100%確信していません。入力した後(および " defaults read com.apple.driver.AppleBluetoothMultitouch.trackpad"で正しく保存されたことを確認した後)でも、辞書のルックアップウィンドウが表示されます。

これが機能する唯一のものですが、MacOS 10.8(これらのメソッドが公開/導入された場所)でのみ機能します。NSTextViewサブクラスの次の2つのメソッドをオーバーライドするだけです。

- (void)quickLookWithEvent:(NSEvent *)event;
- (void)quickLookPreviewItems:(id)sender;
4

3 に答える 3

5

辞書検索は、サービスとして、またはNSTextInputClientプロトコルを介して、2つの方法のいずれかで実装されていると思います。したがって、-validRequestorForSendType:returnType:テキストサブクラスをオーバーライドして、3本指のタップで呼び出されるかどうかを確認します。NOとにかく、それはあなたがすべてのサービスのために返したいあなたのアプリのために聞こえます。また、オーバーライドwriteSelectionToPasteboard:types:してを返す必要がありますNO

それでも問題が解決しない場合は、のメソッドをオーバーライドして、NSTextInputClient呼び出されているかどうかを確認してください。特に、-attributedStringand-attributedSubstringForProposedRange:actualRange:メソッドは、辞書ルックアップがテキストを取得する方法になります。これらの両方を返すnilと、機能しなくなるはずです。このNSTextInputClientプロトコルは、入力メソッドの使用と、アクセント記号や発音区別符号のある文字への長押しアクセスの中心であるため、それを破ることができます。通常の入力メソッドからのリクエストと辞書検索ジェスチャからのリクエストを区別できるかどうかはわかりません。

他のすべてが失敗した場合は、を使用する代わりにカスタムテキストビューを実装NSTextViewできます。些細なことではありませんが、その動作を完全に制御できます。

于 2013-03-17T19:55:20.213 に答える
0

同様の質問に対するこの回答は、プライベートAPIを使用するというトレードオフを伴う例外をスローせずに問題を修正します:https ://stackoverflow.com/a/20618984/959140

サブクラスをオーバーライド-(void)quickLookWithEvent:(NSEvent *)eventするだけで、イベントには何もしません。

于 2014-04-10T12:08:38.363 に答える
0

辞書画面が表示されたら、[ファイル](または編集された可能性があります)/ [設定]に移動し、すべてのオプションのチェックを外して、実際の辞書オプションがチェックされないようにし、アプリを閉じます。ほとんどの場合、表示されなくなります。マウスパッドを使用してコピーや切り取り用のテキストの文字列を選択しようとすると、時々表示されますが、以前のように常に表示されるわけではありません...

于 2017-03-20T16:55:32.013 に答える