gpt4 book ai didi

objective-c - 在 NSCollectionView 子类中接受拖动操作

转载 作者:太空狗 更新时间:2023-10-30 04:01:44 25 4
gpt4 key购买 nike

我已经将 NSCollectionView 子类化,并且正在尝试从 Finder 接收拖动的文件。我收到 draggingEntered: 并返回一个适当的值,但我从未收到 prepareForDragOperation:(也没有收到此过程中之后的任何方法)。我在这里明显遗漏了什么吗?

代码:

- (void)awakeFromNib
{
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];
}

- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
NSLog(@"entered"); //Happens
NSPasteboard *pboard;
NSDragOperation sourceDragMask;

sourceDragMask = [sender draggingSourceOperationMask];
pboard = [sender draggingPasteboard];

if ([[pboard types] containsObject:NSFilenamesPboardType])
{
NSLog(@"copy"); //Happens
return NSDragOperationCopy;
}

return NSDragOperationNone;
}

- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
{
NSLog(@"prepare"); //Never happens
return YES;
}

最佳答案

这已经很晚了,但我发现了问题:

NSCollectionView 默默地提供了一个不兼容的实现:

-(NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender

...Apple 没有对此进行记录。如果您简单地实现该方法以重新调用 draggingEntered 方法,一切正常,例如:

-(NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender
{
return [self draggingEntered:sender];
}

(我来到 SO 希望找到这个自定义实现提供的“魔法”的解释,因为那也是......没有记录(谢谢,Apple!)。我猜它在管理插入方面做了一些聪明的事情-在 CollectionView 中指向?)。

更新:似乎特殊的魔法在 NSCollectionView 的委托(delegate)对象中。出于某种原因,Xcode4 声称没有适合我的委托(delegate),但分配它构建并运行正常。在那里查看所有自定义/半文档化的拖放方法。

(或者只是按照我上面的描述来覆盖自定义行为,并实现一些你可以理解的有效的东西)

关于objective-c - 在 NSCollectionView 子类中接受拖动操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com