うなり声のような通知システムを書いています。通知はウィンドウであり、そのレベルは NSModalPanelWindowLevel に設定されています。唯一の問題は、そのウィンドウにボタンがあり、ユーザーがそのボタンをクリックしたいときに、2 回クリックする必要があることです。しかし、たとえばうなり声では、開いているウィンドウに関係なく、通知をクリックするだけでクリックが登録されます。じゃあレベルの問題?もしそうなら、何に設定すればよいですか?ありがとう
2 に答える
NSView
ウィンドウのビュー コンテンツを構成するカスタム コントロールでは、の-acceptsFirstMouse:
メソッドをオーバーライドして を返したい場合がありますYES
。
討論
受信者は、無条件に値を返すか、または の場所を使用して
theEvent
、イベントが必要かどうかを判断できます。デフォルトの実装は を無視しtheEvent
て返しますNO
。サブクラスでこのメソッドをオーバーライドして、インスタンスがクリックスルーに応答できるようにします。これにより、ユーザーは、最初にクリックしてウィンドウをアクティブにしてからビューをクリックする代わりに、非アクティブなウィンドウのビューをクリックして、1 回のクリックでビューをアクティブにすることができます。ほとんどのビュー オブジェクトはクリックスルーの試行を拒否するため、イベントは単にウィンドウをアクティブにします。ただし、 や のインスタンスなど、多くのコントロール オブジェクトは
NSButton
それらNSSlider
を受け入れるため、ユーザーはマウス ボタンを放さずにすぐにコントロールを操作できます。
これがGrowlの機能であるかどうかはわかりませんが、ウィンドウ内のマウスオーバーイベントをリッスンし、クリックする前にそれらを使用してウィンドウをアクティブ化/非アクティブ化できる場合があります。あなたの問題は、ウィンドウのアクティブ化によって最初のクリックが食われていることだと思います。
しかし、それについては推測してください。
マウスオーバーイベントの処理方法については、次のドキュメントをご覧ください。