我正在尝试启用在选定Files and Folders
上运行的服务,这些服务类似于可以在Finder中调用的服务。
我基于Services Implementation Guide
有以下内容,但仅适用于Text等
+ (void)initialize {
static BOOL initialized = NO;
/* Make sure code only gets executed once. */
if (initialized == YES) return;
initialized = YES;
NSArray *sendTypes = [NSArray arrayWithObject:NSStringPboardType];
[NSApp registerServicesMenuSendTypes:sendTypes returnTypes:nil];
NSLog(@"initialize MyTableView");
}
- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType {
NSLog(@"validRequestorForSendType %@%@", sendType, returnType);
if ([sendType isEqual:NSStringPboardType]) {
return self;
}
return [super validRequestorForSendType:sendType returnType:returnType];
}
如何实施网址?
文档说明
您的NSResponder对象可以注册任何粘贴板数据类型public 或专有的,普通的或罕见的。如果它处理公众和共同 类型,当然,它可以访问更多的服务。有关的列表 标准粘贴板数据类型,请参阅NSPasteboard类参考。
似乎没有相应的粘贴板数据类型。我试过NSURL
,NSURL class
NSFilenamesPboardType
部分有效,但没有显示所有服务查找器,并且似乎属于(OS X v10.5及更早版本)
编辑说明
我一直在关注Services Implementation Guide
,这似乎有3个步骤
1.注册服务对象
NSApp registerServicesMenuSendTypes: returnTypes:
2.验证服务菜单项
validRequestorForSendType:returnType:
3.向服务发送数据
writeSelectionToPasteboard:types:
我有前两个部分工作(虽然我不能得到我在Finder中看到的相同的菜单,特别是Files and Folders
时选择了文件)
第三点似乎是关键点
这似乎支持NSTextView
,但已弃用NSObject
我真的在寻找一些如何使用Files and Folders
服务的方法,就像许多其他应用程序一样。
答案 0 :(得分:1)
我已经完成了这项工作,并且发布的结果是为了其他可能想要做类似事情的人的利益。
前3个方法在我的Class中,它包含了一个View
+ (void)initialize {
static BOOL initialized = NO;
/* Make sure code only gets executed once. */
if (initialized == YES) return;
initialized = YES;
[NSApp registerServicesMenuSendTypes:[NSArray arrayWithObject:(__bridge NSString *)kUTTypeFileURL] returnTypes:nil];
}
- (id)validRequestorForSendType:(NSString *)sendType returnType:(NSString *)returnType {
if ([sendType isEqual:(__bridge NSString *)kUTTypeFileURL]) {
return self;
}
return [super validRequestorForSendType:sendType returnType:returnType];
}
- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types {
if([self.keyDelegate respondsToSelector:@selector(writeSelectionToPasteboard:types:)])
return [self.keyDelegate writeSelectionToPasteboard:pboard types:types];
return FALSE;
}
代表中实际写入粘贴板的最后一个。
- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pboard types:(NSArray *)types {
return [pboard setString:[[[self selectedFile] url] absoluteString] forType:(__bridge NSString *)kUTTypeFileURL];
}
有一定数量的猜测/实验,因为似乎没有明确规定要求。 这是一个简单的实现,因为我只对一种类型感兴趣。