MacOS 开发
来源:互联网 发布:网络招投标系统 编辑:程序博客网 时间:2024/06/10 10:46
- 复制内容到剪贴板
- 获得剪贴板的内容
- 获取不同类型的剪贴板内容
- 粘贴板类型
- 获取方法
- 其他
- 参考资料
复制内容到剪贴板
复制文字
- (void)pasteString{ NSPasteboard *paste = [NSPasteboard generalPasteboard]; [paste clearContents]; [paste writeObjects:@[@"123"]];}
- 复制前,最好清空剪贴板,否则可能复制失败。
- 注意,并非
[[NSPasteboard generalPasteboard] writeFileContents:@"123"];
- 可以同时复制多个字符串,获取时,会换行分格输出所有。
获得剪贴板的内容
获得文字
- 如果你拷贝的是文件里面的文字,剪切板里保存是刚复制的字符串,;
- 如果你拷贝的是一个或多个的文件,文件夹, 这里就是文件或文件夹的名称
- (void)getPasteString{ NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; if ([[pasteboard types] containsObject:NSPasteboardTypeString]) { NSString *str = [pasteboard stringForType:NSPasteboardTypeString]; NSLog(@"粘贴的文字:%@",str); }}
获取不同类型的剪贴板内容
粘贴板类型
NSPasteboardTypeString;NSPasteboardTypePDF;NSPasteboardTypeTIFF;NSPasteboardTypePNG;NSPasteboardTypeRTF;NSPasteboardTypeRTFD;NSPasteboardTypeHTML;NSPasteboardTypeTabularText;NSPasteboardTypeFont;NSPasteboardTypeRuler;NSPasteboardTypeColor;NSPasteboardTypeSound;NSPasteboardTypeMultipleTextSelection;NSPasteboardTypeFindPanelSearchOptions;
获取方法
- (void)getPasteboard{ NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; NSArray *types = [pasteboard types]; NSLog(@"types : %@",types); if ([[pasteboard types] containsObject:NSPasteboardTypeString]) { //如果你拷贝的是文件里面的文字,剪切板里保存是刚复制的字符串,; //如果你拷贝的是一个或多个的文件,文件夹, 这里就是文件或文件夹的名称 NSString *str = [pasteboard stringForType:NSPasteboardTypeString]; NSLog(@"NSPasteboardTypeString : %@",str); } if ([[pasteboard types] containsObject:NSPasteboardTypePDF]) { NSData *pdfData = [pasteboard dataForType:NSPasteboardTypePDF]; if (pdfData) { NSLog(@"NSPasteboardTypePDF:获取成功"); } } if ([[pasteboard types] containsObject:NSPasteboardTypePNG]) { NSData *pdfData = [pasteboard dataForType:NSPasteboardTypePNG]; NSImage *img = [[NSImage alloc]initWithData:pdfData]; if (img) { NSLog(@"NSPasteboardTypePNG:获取成功"); self.imgView.image = img; } } if ([[pasteboard types] containsObject:NSFilenamesPboardType]) { NSArray *filenames = [pasteboard stringForType:NSFilenamesPboardType]; NSLog(@"NSFilenamesPboardType : %@",filenames);//xml 格式 } // 获取到文件路径URL, 亲测有效 NSArray *tempArray = [pasteboard pasteboardItems]; NSLog(@"pasteboardItems:%@",tempArray); for(NSPasteboardItem *tmpItem in tempArray){ NSString *pathString = [tmpItem stringForType:@"public.file-url"]; NSURL *tmpURL = [NSURL URLWithString:pathString]; NSError *error = nil; if (tmpURL) { //跳过隐藏文件,获取到的直接子文件数量(不包含子文件中的子文件) NSArray *children = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:tmpURL includingPropertiesForKeys:nil options:NSDirectoryEnumerationSkipsHiddenFiles error:&error]; NSLog(@"children:%d",[children count]); } } // 同样的,不过好像遍历的更加细致, 不知道有什么不同 for(NSPasteboardItem *tmpItem in tempArray) { NSArray *types = [tmpItem types]; for(NSString *type in types){ NSString *pathString = [tmpItem stringForType:type]; // 如果type是一个public.file-url, 那么url就是一个代表你所复制的文件的路径, 虽然格式有点与该文件的实际路径不一样. NSURL *url = [NSURL URLWithString:pathString]; // 假设你拷贝的文件是一个Image, 你可以直接使用这个url来读取这个image NSImage *image = [[NSImage alloc] initWithContentsOfURL:url]; if (image) { self.imgView.image = image; } // 假设你拷贝的是一个text或rtf等NSString支持的文件类型, 你可以直接使用这个url来初始化一个NSString NSString *string = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSLog(@"------- "); // 反正不管如何, 这种方式,得到的url它是能代表剪贴板里的文件的, 所以是可以直接使用的 NSLog(@"type:%@, pathString:%@\n",type,pathString); } } }
其他
- 其实我也好奇,声音要怎么获取;
- 上述方法,获取图片、pdf等资源是失败的。
参考资料
想名真难:NSPasteboard 整理
http://blog.csdn.net/u014600626/article/details/53635192九天雁翎:MacOS中的剪贴板操作 With Objective C
http://blog.csdn.net/vagrxie/article/details/5344706
阅读全文
0 0
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- MacOS 开发
- 【CSS实现图片等比例缩小不变形】
- Java基础之运算符
- ubuntu 系统的ssh配置
- 关于数据结构->链表的一些基本操作
- MySQL组复制(Group Replication)
- MacOS 开发
- 多态
- Java Classloader原理分析
- 谈谈分布式的通用问题
- shell编程
- SQL中的case when then else end用法
- C语言学习总结
- 删除Git提交记录
- HDU 5917:Ramsey定理