可可 – NSTableView并从Finder拖放

可可 – NSTableView并从Finder拖放,第1张

概述我正在尝试从Finder拖放到我的应用程序的NSTableView.该安装程序使用NSTableView,一个数组控制器,充当使用 Cocoa绑定到Core Data存储的数据源. 我做了以下,基本上是在SO和其他网站上发现的各种博客文章: 在我的视图控制器的awakeFromNib中,我调用: [[self sourcesTableView] registerForDraggedTypes:[N 我正在尝试从Finder拖放到我的应用程序的NStableVIEw.该安装程序使用NStableVIEw,一个数组控制器,充当使用 Cocoa绑定到Core Data存储的数据源.

我做了以下,基本上是在SO和其他网站上发现的各种博客文章:

在我的视图控制器的awakeFromNib中,我调用:

[[self sourcestableVIEw] registerForDraggedTypes:[NSArray arrayWithObjects: NSPasteboardTypePNG,nil]];

我对NSArrayController进行子类化,并将以下方法添加到我的子类中(子类化的推理是数组控制器需要在表视图的数据源中作为数据源时通知它):

- (BOol) tableVIEw: (NStableVIEw *) atableVIEw acceptDrop: (ID < NSDraggingInfo >) info row: (NSInteger) row dropOperation: (NStableVIEwDropOperation)operation

我以前的实现只写入日志,然后返回一个布尔值YES.

- (NSDragOperation) tableVIEw: (NStableVIEw *) atableVIEw valIDateDrop: (ID < NSDraggingInfo >) info proposedRow: (NSInteger) row proposedDropOperation: (NStableVIEwDropOperation) operation

在IB我有数组控制器指向我的自定义NSArrayController子类.

结果:没有.当我将PNG从桌面拖动到我的桌面视图中时,没有任何反应,文件很快地d回到它的起点.我一定要做错事,但不明白什么.我在哪里错了?

解决方法 来自Finder的拖动总是一个文件拖动,而不是一个图像拖动.您需要支持从Finder拖动URL.

为此,您需要声明您需要URL类型:

[[self sourcestableVIEw] registerForDraggedTypes:[NSArray arrayWithObject:(Nsstring*)kUTTypefileURL]];

您可以如下验证文件:

- (NSDragOperation)tableVIEw:(NStableVIEw *)atableVIEw valIDateDrop:(ID < NSDraggingInfo >)info proposedRow:(NSInteger)row proposedDropOperation:(NStableVIEwDropOperation)operation{    //get the file URLs from the pasteboard    NSPasteboard* pb = info.draggingPasteboard;    //List the file type UTIs we want to accept    NSArray* acceptedTypes = [NSArray arrayWithObject:(Nsstring*)kUTTypeImage];    NSArray* urls = [pb readobjectsForClasses:[NSArray arrayWithObject:[NSURL class]]     options:[NSDictionary dictionaryWithObjectsAndKeys:                [NSNumber numberWithBool:YES],NSPasteboardURLReadingfileURLsOnlyKey,acceptedTypes,NSPasteboardURLReadingContentsConformToTypesKey,nil]];    //only allow drag if there is exactly one file    if(urls.count != 1)        return NSDragOperationNone;    return NSDragOperationcopy;}

然后,当您调用tableVIEw:acceptDrop:row:dropOperation:方法时,您将需要再次提取该URL,从URL创建一个图像,然后使用该图像执行某些 *** 作.

即使您正在使用Cocoa绑定,如果要使用拖动方法,仍然需要将对象分配并实现为NStableVIEw的数据源.子类NStableVIEw将不会很好,因为数据源方法在NStableVIEw中未实现.

您只需要在数据源对象中实现与拖动相关的方法,而不是使用绑定来提供表数据的方法.通过调用其中一个NSArrayController方法(如insertObject:atArrangedobjectIndex)或通过使用符合键值编码的访问器方法修改后台阵列,您有责任通知阵列控制器的结果.

总结

以上是内存溢出为你收集整理的可可 – NSTableView并从Finder拖放全部内容,希望文章能够帮你解决可可 – NSTableView并从Finder拖放所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1019256.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存