iOS开发之详解剪贴板.docx
- 文档编号:30310852
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:16
- 大小:695.94KB
iOS开发之详解剪贴板.docx
《iOS开发之详解剪贴板.docx》由会员分享,可在线阅读,更多相关《iOS开发之详解剪贴板.docx(16页珍藏版)》请在冰豆网上搜索。
iOS开发之详解剪贴板
在iOS中,可以使用剪贴板实现应用程序之中以及应用程序之间实现数据的共享。
比如你可以从iPhoneQQ复制一个url,然后粘贴到safari浏览器中查看这个链接的内容。
概述
在iOS中下面三个控件,自身就有复制-粘贴的功能:
1、UITextView
2、UITextField
3、UIWebView
UIKitframework提供了几个类和协议方便我们在自己的应用程序中实现剪贴板的功能。
1、UIPasteboard:
我们可以向其中写入数据,也可以读取数据
2、UIMenuController:
显示一个快捷菜单,用来复制、剪贴、粘贴选择的项。
3、UIResponder中的canPerformAction:
withSender:
用于控制哪些命令显示在快捷菜单中。
4、当快捷菜单上的命令点击的时候,UIResponderStandardEditActions将会被调用。
下面这些项能被放置到剪贴板中
1、UIPasteboardTypeListString—字符串数组,包含kUTTypeUTF8PlainText
2、UIPasteboardTypeListURL—URL数组,包含kUTTypeURL
3、UIPasteboardTypeListImage—图形数组,包含kUTTypePNG和kUTTypeJPEG
4、UIPasteboardTypeListColor—颜色数组
剪贴板的类型分为两种:
系统级:
使用UIPasteboardNameGeneral和UIPasteboardNameFind,系统级应用程序关闭,或者卸载的数据不会丢失。
应用程序级:
通过设置,可以让数据在应用程序关闭之后仍然保存在剪贴板中,但是应用程序卸载之后数据就会失去。
我们可用通过pasteboardWithName:
create:
来创建。
了解这些之后,下面通过一系列的例子来说明如何在应用程序中使用剪贴板。
例子:
一、复制剪贴文本。
下面通过一个例子,可以在tableview上显示一个快捷菜单,上面只有复制按钮,复制tableview上的数据之后,然后粘贴到title上。
定义一个单元格类CopyTableViewCell,在这个类的上显示快捷菜单,实现复制功能。
@interfaceCopyTableViewCell:
UITableViewCell{
iddelegate;
}
@property(nonatomic,retain)iddelegate;
@end
实现CopyTableViewCell,实现粘贴:
viewplain
1#import"CopyTableViewCell.h"
2
3@implementationCopyTableViewCell
4
5@synthesizedelegate;
6
7-(id)initWithStyle:
(UITableViewCellStyle)stylereuseIdentifier:
(NSString*)reuseIdentifier{
8if((self=[superinitWithStyle:
stylereuseIdentifier:
reuseIdentifier])){
9}
10returnself;
11}
12-(void)setSelected:
(BOOL)selectedanimated:
(BOOL)animated{
13[supersetSelected:
selectedanimated:
animated];
14}
15-(void)setHighlighted:
(BOOL)highlightedanimated:
(BOOL)animated{
16[[selfdelegate]performSelector:
@selector(showMenu:
)
17withObject:
selfafterDelay:
0.9f];
18
19[supersetHighlighted:
highlightedanimated:
animated];
20
21}
22-(BOOL)canBecomeFirstResponder
23{
24returnYES;
25}
26-(BOOL)canPerformAction:
(SEL)actionwithSender:
(id)sender{
27if(action==@selector(cut:
)){
28returnNO;
29}
30elseif(action==@selector(copy:
)){
31returnYES;
32}
33elseif(action==@selector(paste:
)){
34returnNO;
35}
36elseif(action==@selector(select:
)){
37returnNO;
38}
39elseif(action==@selector(selectAll:
)){
40returnNO;
41}
42else
43{
44return[supercanPerformAction:
actionwithSender:
sender];
45}
46}
47-(void)copy:
(id)sender{
48UIPasteboard*pasteboard=[UIPasteboardgeneralPasteboard];
49[pasteboardsetString:
[[selftextLabel]text]];
50}
51-(void)dealloc{
52[superdealloc];
53}
54@end
定义CopyPasteTextController
viewplain
55@interfaceCopyPasteTextController:
UIViewController
56//用来标识是否显示快捷菜单
57BOOLmenuVisible;
58UITableView*tableView;
59}
60
61@property(nonatomic,getter=isMenuVisible)BOOLmenuVisible;
62
63@property(nonatomic,retain)IBOutletUITableView*tableView;
64@end
实现CopyPasteTextController:
viewplain
65#import"CopyPasteTextController.h"
66#import"CopyTableViewCell.h"
67
68@implementationCopyPasteTextController
69@synthesizemenuVisible,tableView;
70-(void)viewDidLoad{
71[superviewDidLoad];
72[selfsetTitle:
@"文字复制粘贴"];
73//点击这个按钮将剪贴板的内容粘贴到title上
74UIBarButtonItem*addButton=[[[UIBarButtonItemalloc]
75initWithBarButtonSystemItem:
UIBarButtonSystemItemRefresh
76target:
self
77action:
@selector(readFromPasteboard:
)]
78autorelease];
79[[selfnavigationItem]setRightBarButtonItem:
addButton];
80}
81
82
83//Customizethenumberofsectionsinthetableview.
84-(NSInteger)numberOfSectionsInTableView:
(UITableView*)tableView
85{
86return1;
87}
88
89-(NSInteger)tableView:
(UITableView*)tableViewnumberOfRowsInSection:
(NSInteger)section
90{
91return9;
92}
93
94//Customizetheappearanceoftableviewcells.
95-(UITableViewCell*)tableView:
(UITableView*)tableViewcellForRowAtIndexPath:
(NSIndexPath*)indexPath
96{
97staticNSString*CellIdentifier=@"Cell";
98CopyTableViewCell*cell=(CopyTableViewCell*)[tableView
99dequeueReusableCellWithIdentifier:
CellIdentifier];
100if(cell==nil)
101{
102cell=[[[CopyTableViewCellalloc]initWithStyle:
UITableViewCellStyleDefaultreuseIdentifier:
CellIdentifier]autorelease];
103[cellsetDelegate:
self];
104}
105
106//Configurethecell.
107NSString*text=[NSStringstringWithFormat:
@"Row%d",[indexPathrow]];
108[[celltextLabel]setText:
text];
109returncell;
110}
111
112-(void)tableView:
(UITableView*)tableViewdidSelectRowAtIndexPath:
(NSIndexPath*)indexPath
113{
114if([selfisMenuVisible])
115{
116return;
117}
118[[[selftableView]cellForRowAtIndexPath:
indexPath]setSelected:
YES
119animated:
YES];
120}
121//显示菜单
122-(void)showMenu:
(id)cell{
123if([cellisHighlighted]){
124[cellbecomeFirstResponder];
125
126UIMenuController*menu=[UIMenuControllersharedMenuController];
127[menusetTargetRect:
[cellframe]inView:
[selfview]];
128[menusetMenuVisible:
YESanimated:
YES];
129}
130}
131-(void)readFromPasteboard:
(id)sender{
132[selfsetTitle:
[NSStringstringWithFormat:
@"Pasteboard=%@",
133[[UIPasteboardgeneralPasteboard]string]]];
134}
135
136-(void)didReceiveMemoryWarning
137{
138//Releasestheviewifitdoesn'thaveasuperview.
139[superdidReceiveMemoryWarning];
140
141//Relinquishownershipanycacheddata,images,etcthataren'tinuse.
142}
143
144-(void)viewDidUnload
145{
146[superviewDidUnload];
147[self.tableViewrelease];
148
149//RelinquishownershipofanythingthatcanberecreatedinviewDidLoadorondemand.
150//Forexample:
self.myOutlet=nil;
151}
效果:
复制一行数据:
点击右上角的按钮粘贴,将数据显示在title上:
二、图片复制粘贴
下面通过一个例子,将图片复制和剪贴到另外一个UIImageView中间。
1、在界面上放置两个uiimageview,一个是图片的数据源,一个是将图片粘贴到的地方。
CopyPasteImageViewController代码如下:
viewplain
152@interfaceCopyPasteImageViewController:
UIViewController{
153UIImageView*imageView;
154UIImageView*pasteView;
155UIImageView*selectedView;
156}
157@property(nonatomic,retain)IBOutletUIImageView*imageView;
158@property(nonatomic,retain)IBOutletUIImageView*pasteView;
159@property(nonatomic,retain)UIImageView*selectedView;
160-(void)placeImageOnPasteboard:
(id)view;
161@end
2、当触摸图片的时候我们显示快捷菜单:
viewplain
162-(void)touchesBegan:
(NSSet*)toucheswithEvent:
(UIEvent*)event{
163NSSet*copyTouches=[eventtouchesForView:
imageView];
164NSSet*pasteTouches=[eventtouchesForView:
pasteView];
165
166[selfbecomeFirstResponder];
167if([copyTouchescount]>0){
168[selfperformSelector:
@selector(showMenu:
)
169withObject:
imageViewafterDelay:
0.9f];
170}
171elseif([pasteTouchescount]>0){
172[selfperformSelector:
@selector(showMenu:
)
173withObject:
pasteViewafterDelay:
0.9f];
174}
175[supertouchesBegan:
toucheswithEvent:
event];
176}
177
178-(void)showMenu:
(id)view{
179[selfsetSelectedView:
view];
180
181UIMenuController*menu=[UIMenuControllersharedMenuController];
182[menusetTargetRect:
CGRectMake(5,10,1,1)inView:
view];
183[menusetMenuVisible:
YESanimated:
YES];
184}
这里的快捷菜单,显示三个菜单项:
剪贴、粘贴、复制:
viewplain
185-(BOOL)canPerformAction:
(SEL)actionwithSender:
(id)sender{
186if(action==@selector(cut:
)){
187return([selfselectedView]==imageView)?
YES:
NO;
188}elseif(action==@selector(copy:
)){
189return([selfselectedView]==imageView)?
YES:
NO;
190}elseif(action==@selector(paste:
)){
191return([selfselectedView]==pasteView)?
YES:
NO;
192}elseif(action==@selector(select:
)){
193returnNO;
194}elseif(action==@selector(selectAll:
)){
195returnNO;
196}else{
197return[supercanPerformAction:
actionwithSender:
sender];
198}
199}
200-(void)cut:
(id)sender{
201[selfcopy:
sender];
202[imageViewsetHidden:
YES];
203}
204-(void)copy:
(id)sender{
205[selfplaceImageOnPasteboard:
[selfimageView]];
206}
207-(void)paste:
(id)sender{
208UIPasteboard*appPasteBoard=
209[UIPasteboardpasteboardWithName:
@"CopyPasteImage"create:
YES];
210NSData*data=[appPasteBoarddataForPasteboardType:
@"com.marizack.CopyPasteImage.imageView"];
211pasteView.image=[UIImageimageWithData:
data];
212}
效果:
1、点击图片,显示菜单按钮。
2、点击复制,将数据复制到剪贴板上:
3、点击粘贴,将数据粘贴到uiimageview上。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- iOS 开发 详解 剪贴板