2009-05-08 9 views
1

NSAppオブジェクト(別名[NSApplication sharedApplication])がある場合、現在アクティブなNSTextViewを取得するにはどうすればいいですか?挿入ポイントが現在点滅しています(存在する場合)。 :-)Cocoa:現在どの点のNSTextViewが点滅していますか?

私は[[NSApp keyWindow] contentView]行くと全体のビュー階層を横断しようとしたが、それはあまりにも難しいと思われることができます。理想的なコードは[NSApp focusedTextView]です。

私はアプリやウィンドウのfirstResponderをしようと試み、そしてまたfieldEditor:forObject :,が、これは(私には、少なくとも)面白い何も返しません。

ところで、システム全体の現在のテキストビューを取得する方法が分かっていれば、それはさらにクールです(アクセシビリティAPIは動作しません。つまり、Cocoa NSTextViewは返されません)。

おかげ

答えて

3

-firstResponder機能は、フィールドエディタを返します。したがって、実際のビューが必要な場合は、最初のレスポンダの代理人を確認して取得する必要があります。詳細については、field editorも参照してください。

おそらくNSTextViewsのようにシステム全体を取得する方法はありません。なぜなら、そのオブジェクトは一般に異なるプロセス空間にあるからです。

+0

ありがとうございます。アプリがフィールドエディタをまったく使用しない場合はどうなりますか?たとえば、Pagesではnullを返します。基本的には、セレクタsetInsertionPointColor:に応答する現在のオブジェクトを見つける必要があります。他に何か試してみませんか? –

+0

ああ、私は、ウィンドウのfirstResponder自体が通常setInsertionPointColor:に応答することを発見しましたが、Mail.appではメッセージエディタを表示するために何らかの種類のWebViewを使用しています。 –

1

ところで、誰かがシステムワイドの現在のテキストビューを取得する方法を知っていれば、それはもっとクールです(アクセシビリティAPIは動作しません。つまり、Cocoa NSTextViewは返されません)。

できません。 NSTextViewsはプロセスごとです。他のプロセスがNSConnection経由でサービスを提供することなく、別のプロセスからNSTextViewへのプロキシを取得することはできません。あなたはアクセシビリティを使用しなければならないだけです。明るい側では

、アクセシビリティを使用すると、アプリケーションが(理論的に)もMLTE/HITextViewを使用するカーボンのアプリで動作するべきであることを意味します。

+0

Peter、この投稿に関連する質問があります。私たちがココアでそれをする方法を持っているかどうかを見て、私に知らせてください。 http://stackoverflow.com/questions/6544311/how-to-show-nspanel-on-selected-text-on-hot-key-press-on-current-active-app thanks – AmitSri