NSPasteboard 整理

 最近一直在用  NSPasteboard ,一直上网找太费事, 整理一下 ,数据来源   http://www.cocoachina.com/bbs/read.php?tid=116570&page=1


复制图片,有系统提供的接口,这个简单粗暴而且有效,比遍历数组的好用多了: 

    NSImage * image = [[NSImagealloc] initWithPasteboard: [NSPasteboardgeneralPasteboard] ];





如何获取粘贴板上的内容   


比如我对一个文件或者文字执行了command+c,然后我想在程序种获取到复制的内容的相关信息,应该怎么获取哈 

 NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; 
    NSArray *types = [pasteboard types]; 
    if ([[pasteboard types] containsObject:NSPasteboardTypeString]) { 
        // s 就是剪切板里的字符串, 如果你拷贝的是一个或多个的文件,文件夹, 这里就是文件或文件夹的名称 
        NSString *s = [pasteboard stringForType:NSPasteboardTypeString]; 
        // do something 
    } 
     
    if ([[pasteboard types] containsObject:NSPasteboardTypePDF]) { 
        NSData *pdfData = [pasteboard dataForType:NSPasteboardTypePDF]; 
        // do something 
    } 
     
    if ([[pasteboard types] containsObject:NSPasteboardTypePNG]) { 
        NSData *pdfData = [pasteboard dataForType:NSPasteboardTypePNG]; 
        // do something 
    } 
     
    if ([[pasteboard types] containsObject:NSFilenamesPboardType]) { 
        NSArray *filenames = [pasteboard stringForType:NSFilenamesPboardType]; 
        // do something 
    } 
 
// 10.6以后,最好用这些常量 
 
NSString *const NSPasteboardTypeString; 
NSString *const NSPasteboardTypePDF; 
NSString *const NSPasteboardTypeTIFF; 
NSString *const NSPasteboardTypePNG; 
NSString *const NSPasteboardTypeRTF; 
NSString *const NSPasteboardTypeRTFD; 
NSString *const NSPasteboardTypeHTML; 
NSString *const NSPasteboardTypeTabularText; 
NSString *const NSPasteboardTypeFont; 
NSString *const NSPasteboardTypeRuler; 
NSString *const NSPasteboardTypeColor; 
NSString *const NSPasteboardTypeSound; 
NSString *const NSPasteboardTypeMultipleTextSelection; 
NSString *const NSPasteboardTypeFindPanelSearchOptions; 
 
// 获取到文件路径URL, 亲测有效
NSPasteboard *tmpBoard = [NSPasteboard  generalPasteboard]; 
    NSArray *tempArray = [tmpBoard pasteboardItems]; 
    for(NSPasteboardItem *tmpItem in tempArray) 
    { 
        NSString *pathString = [tmpItem stringForType:@"public.file-url"]; 
         
        NSURL *tmpURL = [NSURL URLWithString:pathString]; 
        NSError *error = nil; 
        //跳过隐藏文件 
        NSArray *children = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:tmpURL includingPropertiesForKeys:nil options:NSDirectoryEnumerationSkipsHiddenFiles error:&error];  
        NSLog(@"%d",[children count]); 
    } 


// 同样的,不过好像遍历的更加细致, 不知道有什么不同
  NSPasteboard *tmpBoard = [NSPasteboard  generalPasteboard]; 
    NSArray *tempArray = [tmpBoard pasteboardItems]; 
    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]; 
             
            // 假设你拷贝的是一个text或rtf等NSString支持的文件类型, 你可以直接使用这个url来初始化一个NSString 
            NSString *string = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 
             
            // 反正不管如何, 这种方式,得到的url它是能代表剪贴板里的文件的, 所以是可以直接使用的 
             
            NSLog(@"%@------%@\n",type,pathString); 
        } 
    } 
 


阅读更多
换一批

没有更多推荐了,返回首页