2012-05-06 6 views
0

ドラッグされた項目をNSMutableArrayに追加するには、ドロップダウンを受け入れるNSButtonがあります。 NSMutableArray内のすべての項目をドラッグするためにNSButtonからドラッグするにはどうすればよいですか?MacOS LionのNSButtonからドラッグを作成する方法

+0

詳細を教えてください。ボタンにアイテムをドロップした後、それらを配列に取得する方法を知りたいのですか、ボタンの中にドラッグする方法を尋ねていますか? – rdelmar

+0

私はすでにそれらをドロップ後に配列に入れています。私はそれらをボタンから戻す方法を知らない。 – Kira

答えて

2

これを行うには、NSViewメソッドdragImage:at:offset:event:pasteboard:source:slideBack:を使用してドラッグを開始する方法があります。カスタムボタンクラスではmouseDown:をオーバーライドし、そのメソッドを呼び出します。私はドラッグされた画像がボタンの画像で、ドラッグしているデータが文字列 "ARRAY"であるという例を書いた。それはソース側から行う必要があるはずのことでなければなりません。あなたが目的地にドロップするとき、ドロップされたものが文字列 "ARRAY"であるかどうかを調べることができます。そして、あなたが作成した配列あなたの最初のドロップと。私は自分のボタンにNSMultipleDocumentsイメージを使用し、ボタンの外にドラッグすると消えます。

- (void)mouseDown:(NSEvent *)theEvent { 
    NSImage *pic = self.image; 
    NSSize dragOffset = NSMakeSize(0.0, 0.0); 
    NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard]; 
    [pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self]; 
    [pboard writeObjects:[NSArray arrayWithObject:@"ARRAY"]]; 
    NSPoint btnMiddle = NSMakePoint(self.frame.size.width/2,self.frame.size.height/2); 
    NSPoint picOrigin = NSMakePoint(btnMiddle.x - pic.size.width/2, btnMiddle.y + pic.size.height/2); 
    self.image = nil; 
    [self dragImage:pic at:picOrigin offset:dragOffset event:theEvent pasteboard:pboard source:self slideBack:YES]; 
} 
+0

これはうまくいっていますが、1つの問題があります。これで、ボタンをクリックして 'clickAction'を呼び出すことはできません。 – Kira

+0

私は[super mouseDown:theEvent]を追加しようとしましたが、それはうまくいきましたが、たびにうまくいくように見えました(ドラッグの代わりに最初にクリックすると画像が消えます)。なぜあなたはボタンにアイテムをドラッグしたいのですか?それは私には奇妙なものですね。 – rdelmar

+0

ボタンはテーブル付きのウィンドウを開きます(ドラッグアンドドロップをサポート)。しかし、私はまた、このウィンドウを開かずにボタンをドラッグ&ドロップしたいと思っています。 ARRAYコンテンツの表示に使用されるテーブル。 – Kira

関連する問題