0
回答
iPhone 3.0新特性系列教程之一 – 使用UIPasteboard复制/粘帖
今天的主题是怎样读/写粘帖板。
 

粘帖板概述
 
多粘帖板
 
iPhone上不只一个粘帖板:
有两个系统粘帖板:一个 通用系统粘帖板用于复制/粘贴操作,一个 查找粘帖板保存上一次搜寻用的字符串。
另外,应用程序还可以创建自己的粘帖板,甚至可以被其他应用程序使用。例如, 零售机程序以及 信用卡终端程序可以使用共享粘帖板来传递支付信息。
 
多重表示
 
加入到粘帖板的条目都有一个 类型。更准确地说,当一个条目加入到粘帖板时,都有一个或多个类型的表示。比如,一个网页地址可以存储为字符串或一个URL。
 
在粘帖板中存储多种表示的好处是带来了条目使用的灵活性。一个email客户端程序可以使用文本表示将URL的NSString注入到邮件主体中;而播客(podcast)可以通过NSURL表示获取播客内容。
 
这种处理方法并非iPhone独有。这种设计可以使Safari中的复制操作在TextMate中产生普通文本而在页面中产生格式化好的文本。
 
粘帖板操作
 
注意:虽然本文中的范例使用通用粘帖板,但因为所有粘帖板都是UIPasteboard的子类,编程方法适用于所有粘帖板。
 
使用通用粘帖板
 
generalPasteboard类方法返回一个通用粘帖板的指针,例如:
1
    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
 
常用属性
 
最常用的粘帖板操作包括获取/设置字符串,图像,URL和颜色。Apple提供了以下方便的方法:
1
2
3
4
5
NSString *string = pasteboard.string;  
UIImage *image = pasteboard.image;  
NSURL *url = pasteboard.URL;  
UIColor *color = pasteboard.color;    
pasteboard.string = @"paste me somewhere";
 
确定一种类型的表示是否存在
 
如果某种类型的条目不存在,那么getter方法将返回nil。这是一个很方便的方法可以预先知道特定类型的表示是否存在。使用containsPasteboardTypes: 方法检查:
1
2
if ([pasteboard containsPasteboardTypes: [NSArray arrayWithObject:@"public.utf8-plain-text"]])      
    NSLog(@"String representation present: %@", pasteboard.string);
 
使用pasteboardTypes可获取一个条目的各种类型。
 
统一类型标志符 — UTI
 
上例中通过检查 public.utf8-plain-text类型来确定字符串是否存在。本例将使用UTI(通用类型标志符)。有关UTI信息,请见Apple的  通用类型标志符概述文档。
 
Apple在UTCoreTypes.h中提供了通用类型的常量。要使用这些常量:
  1. 在项目中加入MobileCoreServices framework
  2. #import <MobileCoreServices/MobileCoreServices.h>
 
常量的类型是CFStringRef。你可以把它们当作NSString。CFStringRef是一种C和Objective-C通用的表达方式。为在Objective-C使用它,只需简单的转换操作:
1
NSString *urlUTIType = (NSString *)kUTTypeURL;
 
你可以自由构造自己的数据类型;为保证独特性,Apple推荐使用reverse-DNS标记式样(如 com.mobileorchard.mySnazzyType)。
 
设置/提取缺乏Getter/Setter的类型
 
Getter/Setter只是为了提供方便。实际上,它们与使用valueForPasteboardType: 和 setValue:forPasteboardType 方法没什么区别:
1
2
NSString *string = [pasteboard valueForPasteboardType:@"public.utf8-plain-text"];  
[pasteBoard setValue:@"paste me somewhere" forPasteboardType:@"public.utf8-plain-text"];
 
此方法适用于字符串,数组,字典,日期,数值和URL。而dataForPasteboardType 和 setData:forPasteboardType: 方法适用于其它各种类型。
 
以多种表示存储条目
 
使用方便的setter有一个很大的限制:条目只能以一种类型存储。而如果使用上述方法,我们可以将URL存为NSString和NSURL,以构成一个类型和值的字典并设置其条目属性:
1
2
3
4
5
static NSString *string = @"http://www.mobileorchard.com";  
NSDictionary *item = [NSDictionary dictionaryWithObjectsAndKeys: string
    @"public.utf8-plain-text", [NSURL URLWithString:string],    
    (NSString *)kUTTypeURL,     nil];  
pasteboard.items = [NSArray arrayWithObject:item];
 
现在,pasteboard.string和pasteboard.url都将有内容返回了。
 
粘帖板支持多条目
 
请注意,在上例中,我们使用了 items — 复数形式 — 属性。为保持本教程的简单性,我将粘帖板视为一个单条目实体。如果你需要,你可以获取/设置粘帖板的条目数组。这实际上很简单,请参见文档。
 
原文见:New In iPhone 3.0 Tutorial Series, Part 3: Copy & Paste With UIPasteboard 作者:Dan Grigsby
原文链接:http://www.cnblogs.com/chen1987lei/archive/2011/06/01/2067208.html
<无标签>
举报
长平狐
发帖于6年前 0回/152阅
顶部