2011-02-08 15 views
2

NSButtonをドラッグ可能にする方法はありますか?最終的に構築されたアプリケーションのように、ユーザーはNSButtonをドラッグできます。ドラッグ可能なNSButton

私は、「ダッシュボード」スタイルのように、ドラッグ可能なもののように何かしようとしています。現時点では、NSButtonをそのまま使用していますが、ドラッグできればいいと思います。

答えて

0

UIControlクラス、UITouch、およびEvent Handlingガイドの「continueTrackingWithTouch:withEvent:」を参照してください。基本的な考え方は、ボタンの中心を更新するためにイベントからの位置データを使用して、TouchDragInsideイベントのハンドラを作成することです。

あなたがiOSで作業していた場合は、これは便利なアドバイスになります。

NSControlとNSViewのいくつかを一見すると、私はそれができると確信しています。私はすぐに答えを出すことはできません。 :(

基本的には、アイデアは、マウスが移動するたびに、あなたがチェックし、同じ相対量によってボタンの位置を更新する、のmouseDownイベントをキャッチし、マウスの位置に注意を払って開始することです。

必要であればもっと後で。

+0

私は「NSButton」ではなく「UIButton」と言っています。 –

+0

ああ、私はiPhoneの土地にこだわっているので、私はちょうどそれらを追加しました。ホールドオン... –

+0

私はUIButtonも読んでいます。 –

3

私は標準Drag-and-drop infrastructureで始まると思います。あなたはすべての機能を使用していない場合でも、それは一般的に良い出発点だとあなたのためのトリッキーな例多くを処理します。

1

へ深さを追加:

あなたはNSButtonをサブクラス化し、オーバライドする必要があります:

-(void)mouseDragged:(NSEvent *)theEvent{ 

//With: 

    NSRect gframe = self.frame; 
    gframe.origin.x = theEvent.locationInWindow.x; 
    [self setFrame:gframe]; 
} 
3

NSButtonは通常、すべてのマウスイベントを食べます。したがって、NSButtonをサブクラス化してドラッグ操作だけでなく、クリック処理をオーバーライドする必要があります。

+0

これを迅速に行うにはどうすればいいですか?これを行うにはどうすればいいですか?ViewController.swiftに@IBAction override func mouseDown(theEvent:NSEvent){...}私がクリックしたNSButtonコントロールの場合を除いて、mouseDownイベント? –

+0

フランク、ありがとう!それは完璧な答えです! –