2010-01-10 7 views
5

NSWindow에 일반 'dot.txt'파일을 드래그하여 데이터를 읽을 수있는 절대적으로 베어 본 코드를 작성하려고합니다. 그보다 더 멋진 것은 없다). 그러나 내가 찾은 모든 예제는 이미지와 NSViews 등을 사용할 수있다. "Cocoa의 드래그 앤 드롭 프로그래밍 토픽"에서 Apple의 'Dragging File Contents'섹션은 일반 NSWindow (NSView 등이 아닌)가 가능하고 내가하려고하는 것을 정확히 논의하는 것처럼 보이지만 상대적인 초보자로서 이미지와 프레임에 대한 참조가 혼란 스럽다.obj-c에서 '.txt'파일을 어떻게 끌어 놓을 수 있습니까?

누구나 'registerForDraggedTypes'에 'initWithFrame'또는 'initWithCoder'메소드를 넣는 것 이외에 어디에서 등록해야 하는지를 보여줄 수 있습니까? 일단 내가 드래그를 인식하도록 창을 얻으면 나중에 다른 'performDragOperation'과 'draggingEntered'에 대해 걱정할 수 있습니다.

감사합니다 :-)

답변

6

이것은 제가 작업하고있는 코드의 일부입니다. 새 프로젝트를 만들 때이 방법을 찾을 수 있습니다.

-(void)applicationDidFinishLaunching:(NSNotification*)aNotification 
{  
    [window registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]]; 
} 

저는 초보자입니다. 어쨌든, 이것은 나를 위해 일했습니다.

그리고, 이것은 중요합니다. 이 객체의 드롭 메시지를 처리하기 위해이 객체를 윈도우 객체에 연결해야합니다.

MainMenu.xib를 열고 Interface Builder가 나타납니다. Interface Builder에서 'App Delegate'(이 객체)를 'Window'의 '대리인'콘센트에 연결하십시오. ('위임자'콘센트는 관리자 패널에서 찾을 수 있습니다.) 이제 'App Delegate'는 'Window'의 이벤트 메시지를받습니다.

그리고는, 같은 클래스 파일에서 더 많은 방법을 추가

-(NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender 
{ 
    return NSDragOperationGeneric; 
} 
-(BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender 
{ 
    NSPasteboard* pbrd = [sender draggingPasteboard]; 
    // Do something here. 
    return YES; 
} 
+0

이 당신이'window' 아울렛이있는 응용 프로그램 대리인이 특정 경우에 OK이지만, 일반적으로 창을 관리 할 것 NSWindowController'에 의해 윈도우 컨트롤의'-windowDidLoad' 메소드에 드래그 타입을 등록 할 수 있습니다. 대답은 일반적으로 정확합니다. –

관련 문제