2012-03-26 3 views
1

具体的には、私はNSTableCellViewでそれを使用しているため、編集を許可しないでトークン化された方法でデータを表示するため、NSTokenFieldマウスイベントを無視したい。NSControl(NSTokenFieldなど)のマウスイベントを無視する方法

トークンフィールドをenabled = NOに設定すると、トークンがグレーアウトされ、テキストを読みにくくなります。

トークンフィールドのを設定すると、トークンフィールドの外観を維持しながら編集ができなくなります。ただし、トークンの上にマウスを置くと、ライトが点灯します。もし私がそれを防ぐことができれば、私はビジネスになるだろう。

私は何かをサブクラス化して、いくつかのNSResponderメソッドをオーバーライドする必要があると思っていますが、どうすればよいかわかりません。 NSTokenFieldをサブクラス化して、mouseEntered:mouseMoved:を上書きしようとしましたが、何もできませんでした。

+0

フィールドはおそらく[追跡エリア](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSTrackingArea_class/Reference/Reference.html)を使用してマウスの入力/終了を取得している可能性がありますイベント。 'mouseEntered:'を無効にした理由を正確にはわかりませんが、サブクラス化されていないフィールドで '[field setTrackingArea:nil]'を試して、何が起こるかを見てください。 –

+0

私がクラスを作成したとき、 'drawRect:'はオーバーライドされていたので、何もしなかったことを指摘してくれてありがとう。私は 'for(tokenField trackingAreas)のNSTrackingArea * trackingAreaを試しました){ [tokenField removeTrackingArea:trackingArea]; } '、しかしサイコロはありません。また、 'mouseEntered:'に加えて 'mouseMoved:'をオーバーライドしようとしましたが、どちらもうまくいきませんでした。 – yuji

+0

@yuji:テストする時点で私のマシンを持っていません。アイデア。あなたはこのクラスのためにあなた自身の書き換えを書いておきたいかもしれません。例として 'BWToolkit'を見てください。 –

答えて

2

多くのことを試した後、ついにIuliusCæsarの提案に基づいて動作させました。

トリックはNSTextFieldをサブクラス化し、オーバーライドすることだったtrackingAreas

フィールドは、スクロールビューにあったし、時にはトラッキングエリアがあろうから、それはかなり十分ではなかったの作成時に
- (NSArray *)trackingAreas 
{ 
    return [NSArray array]; 
} 

単にフィールドのトラッキングエリアを削除します再作成する必要があります。

+0

私の提案は助けになりました!私はそれが正しいルートであることを完全には確信していませんでした。 –

関連する問題