ios开发读取剪切板的内容_iOS开发之详解剪贴板

在iOS中,可以使用剪贴板实现应用程序之中以及应用程序之间实现数据的共享。比如你可以从iPhone QQ复制一个url,然后粘贴到safari浏览器中查看这个链接的内容。

概述

在iOS中下面三个控件,自身就有复制-粘贴的功能:

1、UITextView

2、UITextField

3、UIWebView

UIKit framework提供了几个类和协议方便我们在自己的应用程序中实现剪贴板的功能。

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,在这个类的上显示快捷菜单,实现复制功能。

1 @interface CopyTableViewCell : UITableViewCell {2 id delegate;3 }4 @property (nonatomic, retain) id delegate;5 @end

View Code

实现CopyTableViewCell ,实现粘贴:

1 #import "CopyTableViewCell.h"

2

3 @implementation CopyTableViewCell4

5 @synthesize delegate;6

7 - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {8 if ((self =[super initWithStyle:style reuseIdentifier:reuseIdentifier])) {9 }10 returnself;11 }12 - (void)setSelected:(BOOL)selected animated:(BOOL)animated {13 [super setSelected:selected animated:animated];14 }15 - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {16 [[self delegate] performSelector:@selector(showMenu:)17 withObject:self afterDelay:0.9f];18

19 [super setHighlighted:highlighted animated:animated];20

21 }22 -(BOOL)canBecomeFirstResponder23 {24 returnYES;25 }26 -(BOOL)canPerformAction:(SEL)action withSender:(id)sender{27 if (action ==@selector(cut:)){28 returnNO;29 }30 else if(action ==@selector(copy:)){31 returnYES;32 }33 else if(action ==@selector(paste:)){34 returnNO;35 }36 else if(action == @selector(select:)){37 returnNO;38 }39 else if(action ==@selector(selectAll:)){40 returnNO;41 }42 else

43 {44 return[super canPerformAction:action withSender:sender];45 }46 }47 - (void)copy:(id)sender {48 UIPasteboard *pasteboard =[UIPasteboard generalPasteboard];49 [pasteboard setString:[[self textLabel]text]];50 }51 - (void)dealloc {52 [super dealloc];53 }54 @end

View Code

定义CopyPasteTextController

1 @interface CopyPasteTextController : UIViewController{2 //用来标识是否显示快捷菜单

3 BOOL menuVisible;4 UITableView *tableView;5 }6

7 @property (nonatomic, getter=isMenuVisible) BOOL menuVisible;8

9 @property (nonatomic, retain) IBOutlet UITableView *tableView;10 @end

View Code

实现CopyPasteTextController :

1 #import "CopyPasteTextController.h"

2 #import "CopyTableViewCell.h"

3

4 @implementation CopyPasteTextController5 @synthesize menuVisible,tableView;6 - (void)viewDidLoad {7 [super viewDidLoad];8 [self setTitle:@"文字复制粘贴"];9 //点击这个按钮将剪贴板的内容粘贴到title上

10 UIBarButtonItem *addButton =[[[UIBarButtonItem alloc]11 initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh12 target:self13 action:@selector(readFromPasteboard:)]14 autorelease];15 [[self navigationItem] setRightBarButtonItem:addButton];16 }17

18

19 //Customize the number of sections in the table view.

20 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView21 {22 return 1;23 }24

25 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section26 {27 return 9;28 }29

30 //Customize the appearance of table view cells.

31 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath32 {33 static NSString *CellIdentifier =@"Cell";34 CopyTableViewCell *cell = (CopyTableViewCell *)[tableView35 dequeueReusableCellWithIdentifier:CellIdentifier];36 if (cell ==nil)37 {38 cell =[[[CopyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];39 [cell setDelegate:self];40 }41

42 //Configure the cell.

43 NSString *text = [NSString stringWithFormat:@"Row %d", [indexPath row]];44 [[cell textLabel] setText:text];45 returncell;46 }47

48 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath49 {50 if([self isMenuVisible])51 {52 return;53 }54 [[[self tableView] cellForRowAtIndexPath:indexPath] setSelected:YES55 animated:YES];56 }57 //显示菜单

58 - (void)showMenu:(id)cell {59 if([cell isHighlighted]) {60 [cell becomeFirstResponder];61

62 UIMenuController * menu =[UIMenuController sharedMenuController];63 [menu setTargetRect: [cell frame] inView: [self view]];64 [menu setMenuVisible: YES animated: YES];65 }66 }67 - (void)readFromPasteboard:(id)sender {68 [self setTitle:[NSString stringWithFormat:@"Pasteboard = %@",69 [[UIPasteboard generalPasteboard] string]]];70 }71

72 - (void)didReceiveMemoryWarning73 {74 //Releases the view if it doesn't have a superview.

75 [super didReceiveMemoryWarning];76

77 //Relinquish ownership any cached data, images, etc that aren't in use.

78 }79

80 - (void)viewDidUnload81 {82 [super viewDidUnload];83 [self.tableView release];84

85 //Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.86 //For example: self.myOutlet = nil;

87 }

View Code

效果:

复制一行数据:

点击右上角的按钮粘贴,将数据显示在title上:

二、图片复制粘贴

下面通过一个例子,将图片复制和剪贴到另外一个UIImageView中间。

1、在界面上放置两个uiimageview,一个是图片的数据源,一个是将图片粘贴到的地方。CopyPasteImageViewController 代码如下:

1 @interface CopyPasteImageViewController : UIViewController {2 UIImageView *imageView;3 UIImageView *pasteView;4 UIImageView *selectedView;5 }6 @property (nonatomic, retain) IBOutlet UIImageView *imageView;7 @property (nonatomic, retain) IBOutlet UIImageView *pasteView;8 @property (nonatomic, retain) UIImageView *selectedView;9 - (void)placeImageOnPasteboard:(id)view;10 @end

View Code

2、当触摸图片的时候我们显示快捷菜单:

1 - (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{2 NSSet *copyTouches = [eventtouchesForView:imageView];3 NSSet *pasteTouches = [eventtouchesForView:pasteView];4

5 [self becomeFirstResponder];6 if ([copyTouches count] > 0) {7 [self performSelector:@selector(showMenu:)8 withObject:imageView afterDelay:0.9f];9 }10 else if([pasteTouches count] > 0) {11 [self performSelector:@selector(showMenu:)12 withObject:pasteView afterDelay:0.9f];13 }14 [super touchesBegan:touches withEvent:event];15 }16

17 - (void)showMenu:(id)view {18 [self setSelectedView:view];19

20 UIMenuController * menu =[UIMenuController sharedMenuController];21 [menu setTargetRect: CGRectMake(5, 10, 1, 1) inView: view];22 [menu setMenuVisible: YES animated: YES];23 }

View Code

这里的快捷菜单,显示三个菜单项:剪贴、粘贴、复制:

1 -(BOOL)canPerformAction:(SEL)action withSender:(id)sender{2 if (action ==@selector(cut:)) {3 return ([self selectedView] == imageView) ?YES : NO;4 } else if (action ==@selector(copy:)) {5 return ([self selectedView] == imageView) ?YES : NO;6 } else if (action ==@selector(paste:)) {7 return ([self selectedView] == pasteView) ?YES : NO;8 } else if (action == @selector(select:)) {9 returnNO;10 } else if (action ==@selector(selectAll:)) {11 returnNO;12 } else{13 return[super canPerformAction:action withSender:sender];14 }15 }16 - (void)cut:(id)sender {17 [self copy:sender];18 [imageView setHidden:YES];19 }20 - (void)copy:(id)sender {21 [self placeImageOnPasteboard:[self imageView]];22 }23 - (void)paste:(id)sender {24 UIPasteboard *appPasteBoard =

25 [UIPasteboard pasteboardWithName:@"CopyPasteImage"create:YES];26 NSData *data =[appPasteBoard dataForPasteboardType:@"com.marizack.CopyPasteImage.imageView"];27 pasteView.image =[UIImage imageWithData:data];28 }

View Code

效果:

1、点击图片,显示菜单按钮。

2、点击复制,将数据复制到剪贴板上:

3、点击粘贴,将数据粘贴到uiimageview上。

总结:

本文详解了iOS系统应用程序中如何使用剪贴板。

转自:http://blog.csdn.net/zhuqilin0/article/details/6661044

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
<p> <b><span style="background-color:#FFE500;">【超实用课程内容】</span></b> </p> <p> <br /> </p> <p> <br /> </p> <p> 本课程内容包含讲解<span>解读Nginx基础知识,</span><span>解读Nginx核心知识、带领学员进行</span>高并发环境下Nginx性能优化实战,让学生能够快速将所学融合到企业应用中。 </p> <p> <br /> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><br /> </b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><span style="background-color:#FFE500;">【课程如何观看?】</span></b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> PC端:<a href="https://edu.csdn.net/course/detail/26277"><span id="__kindeditor_bookmark_start_21__"></span></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 移动端:CSDN 学院APP(注意不是CSDN APP哦) </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 本课程为录播课,课程永久有效观看时长,大家可以抓紧时间学习后一起讨论哦~ </p> <p style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <br /> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <strong><span style="background-color:#FFE500;">【学员专享增值服务】</span></strong> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b>源码开放</b> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 下载方式:电脑登录<a href="https://edu.csdn.net/course/detail/26277"></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a>,播放页面右侧点击课件进行资料打包下载 </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p>
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页