Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何在NSScrollView的子视图上进行拖放?与LaunchPad完全相同_Objective C_Macos_Cocoa_Drag And Drop_Nsscrollview - Fatal编程技术网

Objective c 如何在NSScrollView的子视图上进行拖放?与LaunchPad完全相同

Objective c 如何在NSScrollView的子视图上进行拖放?与LaunchPad完全相同,objective-c,macos,cocoa,drag-and-drop,nsscrollview,Objective C,Macos,Cocoa,Drag And Drop,Nsscrollview,我找了很多。但是我很困惑,所以我来这里解决我的问题 我想制作一个与mac os的LaunchPad完全相同的视图。拥有iOS编程方面的专业知识,而不是mac 这是我开始MacOSX编程的时间 请告知哪些组件是它最好的组成部分 我从NSScrollView开始,内部子视图继承了NSView 但我对此没有什么疑惑 拖动操作是否接受NSScrollView的子视图??(通常在iOS中有一些复杂的逻辑来实现这一点) 拖放或其他操作时是否可以使用此部件?? 还有一些鼠标事件也有。我想这会有帮助的 请建议一

我找了很多。但是我很困惑,所以我来这里解决我的问题

我想制作一个与mac os的LaunchPad完全相同的视图。拥有iOS编程方面的专业知识,而不是mac

这是我开始MacOSX编程的时间

请告知哪些组件是它最好的组成部分

我从NSScrollView开始,内部子视图继承了NSView

但我对此没有什么疑惑

拖动操作是否接受NSScrollView的子视图??(通常在iOS中有一些复杂的逻辑来实现这一点)

拖放或其他操作时是否可以使用此部件??

还有一些鼠标事件也有。我想这会有帮助的

请建议一些链接或博客,推动我在这项任务中前进

求你了


您的视图或窗口需要注册以接收您感兴趣的粘贴板类型的拖动:

[self registerForDraggedTypes:@[(id)kUTTypeURL]];
当拖动进入视图时,您将得到第一个回调:

- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)info
{
    NSPasteboard    *draggingPasteboard = [info draggingPasteboard];
    //  NSDragOperation draggingSourceOperationMask = [sender draggingSourceOperationMask];

    NSArray         *classes            = @[[NSURL class]];
    NSDictionary    *options            = @{NSPasteboardURLReadingFileURLsOnlyKey : @YES};

    if ([draggingPasteboard canReadObjectForClasses:classes options:options]) {
        //      NSArray *fileURLs = [draggingPasteboard readObjectsForClasses:classes
        //                                                            options:options];
        //
        //      if ([fileURLs count] != 1) {
        //          return NSDragOperationNone;
        //      }

        return NSDragOperationLink;
    }

    return NSDragOperationNone;
}
-(NSDragOperation)DragginGeted:(id)信息
{
NSPasteboard*draggingPasteboard=[info draggingPasteboard];
//NSDRAGO操作draggingSourceOperationMask=[发送方draggingSourceOperationMask];
NSArray*类=@[[NSURL类]];
NSDictionary*选项=@{NSPasteboardURLReadingFileURLsOnlyKey:@YES};
if([draggingPasteboard CanReadObjectForClass:classes选项:选项]){
//NSArray*fileURLs=[draggingPasteboard ReadObjectsForClass:类
//选项:选项];
//
//如果([FileURL计数]!=1){
//返回nsdragooperationne;
//      }
返回NSDragOperationLink;
}
返回nsdragooperationne;
}
如果拖动在视图上结束(例如,文件被删除),您将获得另一个回调,您可以从粘贴板读取并处理收到的项目:

- (BOOL)performDragOperation:(id <NSDraggingInfo>)info
{
    NSPasteboard *draggingPasteboard = [info draggingPasteboard];

    if ([draggingPasteboard canReadObjectForClasses:[NSArray arrayWithObject:[NSURL class]] options:nil]) {
        return [self addItemWithDragInfo:info];
    }

    return NO;
}

- (BOOL) addItemWithDragInfo:info:(id <NSDraggingInfo>)info
{
    NSPasteboard    *draggingPasteboard = [info draggingPasteboard];

    NSArray         *classes            = @[[NSURL class]];
    NSDictionary    *options            = @{NSPasteboardURLReadingFileURLsOnlyKey : @YES};

    NSArray         *fileURLs           = [draggingPasteboard readObjectsForClasses:classes options:options];

    // TODO: Do something with those files…

    return YES;
}
-(BOOL)性能跟踪操作:(id)信息
{
NSPasteboard*draggingPasteboard=[info draggingPasteboard];
if([draggingPasteboard CanReadObjectForClass:[NSArray arrayWithObject:[NSURL class]]选项:nil]){
返回[self addItemWithDragInfo:info];
}
返回否;
}
-(BOOL)addItemWithDragInfo:info:(id)info
{
NSPasteboard*draggingPasteboard=[info draggingPasteboard];
NSArray*类=@[[NSURL类]];
NSDictionary*选项=@{NSPasteboardURLReadingFileURLsOnlyKey:@YES};
NSArray*fileURLs=[draggingPasteboard读取对象循环:类选项:选项];
//TODO:对那些文件做点什么…
返回YES;
}

顺便说一句,LaunchPad可能使用NcollectionView或IKImageBrowserView。这些视图已经包含了一些对拖放的支持。

您确定NSCollectionView对我的情况有帮助吗?我在Mac应用程序(HoudahSpot、HoudahGeo和Tembo–)中使用了IKImageBrowserView。我记得我反复评估了NSCollectionView。不幸的是,我总是忘记为什么每次我最终都更喜欢IKImageBrowserView而不是NSCollectionView。是否有任何选项可供摸索??就像LaunchPad中的实用程序文件夹一样。我不这么认为。您可以通过在主视图上方临时显示第二个浏览器视图来实现这一点。我太困惑了。我刚刚用IKImageBrowserView做了一个拖放功能。但我不确定它是否会和LaunchPad视图一样。请建议我如何在正确的轨道上前进。