【发布时间】:2011-09-06 16:35:11
【问题描述】:
我正在编写一个需要接受文件夹删除的自定义视图。条件是:只接受目录,所以当用户拖动文件时什么都不会发生。
我已将我的视图注册到:
[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
并且已经实现了基本的拖动协议方法。出于测试目的:
- (NSDragOperation)draggingEntered:(id<NSDraggingInfo>)sender
{
NSLog("@Drag Entered");
return NSDragOperationCopy;
}
- (NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender
{
return NSDragOperationCopy;
}
- (void)draggingExited:(id<NSDraggingInfo>)sender
{
NSLog(@"Dragging Exited");
}
- (BOOL)prepareForDragOperation:(id<NSDraggingInfo>)sender { return YES; }
- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender { return YES; }
所以它几乎可以正常工作:光标在视图上拖动时会出现一个加号。但是,如果该项目是常规文件,我想避免这种情况。
一旦我得到拖动的路径,我可能需要使用 NSFileManager 执行此操作(尽管我想知道是否有更简单的方法),但问题是在哪里。我试图将测试权包含在返回 NSDragOperationNone 的 draggingEntered: 方法中,但没有成功。我正在关注 Apple 文档中的 sn-p:
{
NSPasteboard *pboard = [sender draggingPasteboard];
if ( [[pboard types] containsObject:NSFilenamesPboardType] ) {
NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];
int numberOfFiles = [files count];
// Perform operation using the list of files
}
return YES;
}
我应该在哪里实现这个测试,所以如果拖动文件,光标会保持不变?
【问题讨论】:
标签: objective-c cocoa drag-and-drop osx-snow-leopard nsdragginginfo