那麼,你需要實現NSDraggingDestination協議,我想你已經讀過。您可以在特定視圖或整個窗口中實現它 - 聽起來像您正在接受應用程序級文件拖動,因此您可能希望整個窗口接受拖動。無論如何,一旦你得到它的工作,你會看到如何進一步定製它。
NSWindow子類。第一步是指定你是什麼類型的拖動的興趣
告訴它的興趣在文件名自定義窗口:
- (void)awakeFromNib {
[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
}
泰爾OS X什麼樣的光標來顯示:
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
return NSDragOperationCopy;
}
- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender {
return NSDragOperationCopy;
}
執行阻力:
- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
NSPasteboard *pboard = [sender draggingPasteboard];
NSArray *filenames = [pboard propertyListForType:NSFilenamesPboardType];
if (1 == filenames.count)
if ([[NSApp delegate] respondsToSelector:@selector(application:openFile:)])
return [[NSApp delegate] application:NSApp openFile:[filenames lastObject]];
return NO;
}
這是最起碼的得到它的工作。
好的,謝謝你的信息。當我將'[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];''喚醒爲'awakeFromNib'時,我得到一個異常,並且:***由於未捕獲異常'NSInvalidArgumentException'而終止應用程序,原因:' - [MyAppAppDelegate registerForDraggedTypes:] :無法識別的選擇發送到實例0x100141330' – 2011-12-19 21:51:05
哦,還添加'[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];'給我一個警告:方法-registerForDraggedTypes找不到 – 2011-12-19 21:52:04
您需要調用該窗口或視圖的方法接受拖延。我更喜歡從窗口本身,在我的NSWindow子類中的'awakeFromNib'中調用它。 – 2011-12-19 21:53:38