我有一个NSPasteboard:
NSPasteboard *pasteboard;
Run Code Online (Sandbox Code Playgroud)
得到它:
pasteboard = [[NSPasteboard generalPasteboard] retain];
Run Code Online (Sandbox Code Playgroud)
现在我想确定最后一个条目的类型,如格式化文本或图像等,如果是文本,则获取它的内容等.
如何找出贴板中的数据类型?
我记录了[粘贴板类型]的输出:
2011-05-07 20:13:30.491 YourApp[15335:903] Pasteboard changed: (
"public.utf8-plain-text",
NSStringPboardType,
"dyn.ah62d4rv4gu8y63n2nuuhg5pbsm4ca6dbsr4gnkduqf31k3pcr7u1e3basv61a3k",
"NeXT smart paste pasteboard type"
)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何检查它是否是文字或其他任何东西......
" 粘贴板编程指南"中对此进行了全面介绍.执行此操作的标准方法是列出您感兴趣的类型,然后只要求粘贴板为您提供这些类型.如果它有这些类型的对象,你就可以得到它们.否则,你什么也得不到.
NSPasteboard * pboard = [NSPasteboard generalPasteboard];
NSArray * interestingTypes;
interestingTypes = [NSArray arrayWithObjects:[NSAttributedString class],
[NSString class], nil];
NSArray * pboardContents = [pboard readObjectsForClasses:interestingTypes
options:nil];
if( pboardContents ) {
// Use the contents
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用不同的类型列表进行多次查询:
NSArray * imgType = [NSArray arrayWithObject:[NSImage class]];
NSArray * strType = [NSArray arrayWithObject:[NSString class]];
NSArray * pboardImg = [pboard readObjectsForClasses:imgType
options:nil];
NSArray * pboardStr = [pboard readObjectsForClasses:strType
options:nil];
if( pboardImg ){
// Got an image!
}
if( pboardStr ){
// Got a string!
}
Run Code Online (Sandbox Code Playgroud)
您也可以简单地询问粘贴板是否具有您感兴趣的类型之一,而无需实际获取对象.这会给你一个简单的YES或NO:
[pboard canReadObjectForClasses:interestingTypes
options:nil];
Run Code Online (Sandbox Code Playgroud)
请注意,Snow Leopard中的粘贴板处理方式发生了变化,因此,不幸的是,Leopard中的这种情况完全不同.
| 归档时间: |
|
| 查看次数: |
1733 次 |
| 最近记录: |