itok's Lab

昔の開発ネタを記録として残してます

NSControlで -mouseDragged: をつかまえる

NSButton など NSControl のサブクラス(のサブクラス)を実装して、そこでマウスのドラッグを受け付けたい場合、 NSControl はもちろん NSResponder のサブクラスですから

-(void)mouseDragged:(NSEvent*)event

を上書きしてあげればよさそうです。が、うまくいかないこともあります。というのも上述のように NSControl のサブクラスといえば NSButton に代表されるように、もともとマウスクリックなどに反応するようなものばかりでして、mouseDown のイベントが親クラスに到達し、登録されている action が実行されてしまうと、その後の mouseDrag は無視されてしまうみたい。

じゃあ、どうするかっていうと、

-(void)mouseDown:(NSEvent*)event

を上書きして、親クラスに mouseDown が到達しないようにすればOK。で、mouseUp 時に必要があれば親クラスにマウスクリックを伝えてあげればよいかと。