首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接受只拖放文件夹

接受只拖放文件夹
EN

Stack Overflow用户
提问于 2011-06-01 22:09:16
回答 1查看 2.9K关注 0票数 6

我正在编写一个需要接受文件夹删除的自定义视图。条件是:只有目录被接受,所以当用户拖动一个文件时,什么都不应该发生。

我已将我的观点记录在:

代码语言:javascript
复制
[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];

并且已经实现了基本的拖拽协议方法。为测试目的:

代码语言:javascript
复制
- (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 (虽然我想知道是否有一种更简单的方法)来完成这个任务,但是问题是在哪里。我尝试将测试直接包含在draggingEntered:方法中,返回NSDragOperationNone,但没有成功。下面是苹果文档中的一个片段:

代码语言:javascript
复制
{
    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;
}

我应该在哪里实现这个测试,这样如果文件被拖动,游标就会保持不变?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-02 02:15:48

您应该在-draggingEntered:中实现测试,如果pasteboard包含文件,则返回NSDragOperationNone

但是,由于您也实现了‑draggingUpdated:,所以还需要将文件夹类型的测试添加到该方法中。

目前,您总是在没有测试文件类型的情况下在‑draggingUpdated:中返回‑draggingUpdated:,这意味着一旦鼠标在拖动目标中移动,光标将更改为复制游标,而不管您在‑draggingEntered:中做什么。

注意,实现‑draggingUpdated:是可选的。如果您没有实现具有多个可能的拖放目标的复杂视图,那么您不需要实现它,只需要‑draggingEntered:‑draggingExited:

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6208334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档