2012-11-12 90 views
3

我在的NSView testig拖放,但draggingEntered:不會被調用。代碼:拖放在一個NSView

#import <Cocoa/Cocoa.h> 
@interface testViewDrag : NSView <NSDraggingDestination> 
@end 

@implementation testViewDrag 
- (id)initWithFrame:(NSRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) 
{ 
    [self registerForDraggedTypes:[NSImage imagePasteboardTypes]]; 
    NSLog(@"initWithFrame"); 
} 
return self; 
} 

-(NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender 
{ 
NSLog(@"draggingEntered"); 
return NSDragOperationEvery; 
} 

-(NSDragOperation) draggingUpdated:(id<NSDraggingInfo>)sender 
{ 
    NSLog(@"draggingUpdated"); 
    return NSDragOperationEvery; 
} 
@end 

在界面生成器我添加一個子視圖(類設置爲testViewDrag)到主窗口。 在日誌中我可以看到initWithFrame日誌,但是當我什麼都不拖在日誌中顯示。

什麼,我缺少什麼? 「

回答

7

」要接收拖動操作,必須通過向對象發送一個registerForDraggedTypes:消息(在NSWindow和NSView中定義)來註冊窗口或視圖將接受的粘貼板類型,並實現NSDraggingDestination協議中的幾種方法。拖動會話,僅當目的地被註冊爲匹配剪貼板的數據的類型被拖動一個紙板類型的候選目的地接收NSDraggingDestination消息,目的接收這些消息作爲一個圖像進入,圍繞內移動,然後退出或釋放在目的地的邊界內「。您可以閱讀關於拖放式編程主題here的更多信息。在我看來,你的問題就在於你在registerForDraggedTypes:方法定義的參數。

嘗試用這種替代它:

[self registerForDraggedTypes:[NSArray arrayWithObjects: 
     NSColorPboardType, NSFilenamesPboardType, nil]]; 

希望這有助於!

+0

謝謝你的工作就像一個魅力,如果你現在可以告訴我怎麼去 拖動文件的路徑:) –

+2

例如, - (BOOL)performDragOperation:(ID )發件人{ 的NSArray * thefiles = [[sender draggingPasteboard] propertyListForType:NSFilenamesPboardType]; //處理任何你想在這裏 } –

+0

我真的很感謝你的幫助,這是我的應用程序拉斯維加斯點,非常感謝你。 –