将URL拖入我的应用程序
问题描述:
我发布了this question关于将内容从OS X Finder拖入NSTableView
。这一切现在很好地工作。但是,如果我想将URL从浏览器地址栏拖到我的应用中,我首先需要将它们拖到桌面(它们显示为.webloc文件的位置),然后将它们拖到我的应用中。将URL拖入我的应用程序
有没有办法直接将它们从浏览器地址栏拖到我的应用程序中,而无需先将它们拖动到桌面上?
我试图注册kUTTypeURL
但是这似乎并没有工作,因为拖的URL被退回原籍:
[[self sourcesTableView] registerForDraggedTypes:[NSArray arrayWithObjects: (NSString*)kUTTypeFileURL, (NSString*)kUTTypeURL, nil]];
答
在my accepted answer到您的其他问题,我专门提供的代码限制网址,您的应用程序可以接受的文件网址:
NSArray* urls = [pb readObjectsForClasses:[NSArray arrayWithObject:[NSURL class]]
options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES]
forKey: NSPasteboardURLReadingFileURLsOnlyKey]];
注意包含布尔YES
为NSPasteboardURLReadingFileURLsOnlyKey
选项字典。
如果你想接受任何URL,只是这样做:
NSArray* urls = [pb readObjectsForClasses:[NSArray arrayWithObject:[NSURL class]]
options:nil];
甚至更好,你可以要求你只要接受任何URL,因为它是一种特殊类型的,在这种情况下,一张图片:
NSArray* acceptedTypes = [NSArray arrayWithObject:(NSString*)kUTTypeImage];
NSArray* urls = [pb readObjectsForClasses:[NSArray arrayWithObject:[NSURL class]]
options:[NSDictionary dictionaryWithObject:acceptedTypes
forKey:NSPasteboardURLReadingContentsConformToTypesKey]];
公平点。我没有注意拖动操作的纸板面。感谢您指出了这一点。 – Roger 2012-04-26 00:08:33
这很好。我简化了原始问题的答案,使用'NSPasteboardURLReadingContentsConformToTypesKey',直到今天我都没有意识到自己,所以我们都学到了一些东西:-) – 2012-04-26 00:12:57