2012-05-06 5 views
0

NSMutableArray에 드래그 된 항목을 추가하기 위해 드롭 다운을 허용하는 NSButton이 있습니다. 어떻게하면 NSMutableArray의 모든 항목을 드래그하기 위해 NSButton에서 드래그 할 수 있습니까?MacOS에서 NSButton에서 드래그하는 방법 Lion

+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

작동하지만 한 가지 문제가 있습니다. 이제 'clickAction'을 호출하기 위해 버튼을 클릭 할 수 없습니다. – Kira

+0

나는 그렇게하기에는 까다로울 수 있다고 생각합니다. [super mouseDown : theEvent]를 추가해 보았습니다. 그런 식으로 일했지만, 다른 모든 시간에는 작동하는 것처럼 보였습니다. 그리고 끌기 대신 처음을 클릭하면 이미지가 사라집니다. 왜 어떤 식 으로든 버튼에 항목을 드래그하고 싶지 않으시 나? – rdelmar

+0

버튼은 테이블이있는 윈도우를 엽니 다 (드래그 앤 드롭 지원). 하지만이 창을 열지 않고도 드래그 앤 드롭을 버튼에서/버튼으로 가져오고 싶습니다. ARRAY 내용을 표시하는 데 사용되는 표. – Kira

관련 문제