将URL拖到我的应用程序中

时间:2012-04-25 23:11:09

标签: cocoa drag-and-drop nstableview

我发布了this question关于将内容从OS X Finder拖到NSTableView的问题。这一切都很好用。但是,如果我想将URL从浏览器地址栏拖到我的应用程序中,我首先需要将它们拖到桌面上(它们显示为.webloc文件),然后将它们拖到我的应用程序中。

有没有办法直接将它们从浏览器地址栏拖到我的应用中,而不必先将它们拖到桌面上?

我尝试注册kUTTypeURL但这似乎不起作用,因为拖动的网址会反弹回原点:

[[self sourcesTableView] registerForDraggedTypes:[NSArray arrayWithObjects: (NSString*)kUTTypeFileURL, (NSString*)kUTTypeURL, nil]];

1 个答案:

答案 0 :(得分:0)

my accepted answer的问题中,我提供的代码专门限制了您的应用可以接受的文件网址:

NSArray* urls = [pb readObjectsForClasses:[NSArray arrayWithObject:[NSURL class]]
 options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] 
                                     forKey: NSPasteboardURLReadingFileURLsOnlyKey]];

请注意包含YES的布尔NSPasteboardURLReadingFileURLsOnlyKey的选项字典。

如果您想接受任何网址,请执行以下操作:

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]];