- 浏览: 72152 次
文章分类
- 全部博客 (38)
- ddddddddddd (1)
- java (37)
- Spring中Quartz的Cron表达式详解 (1)
- ORACLE中一个字符占多少字节 (1)
- sssdfd (1)
- jquery演示汉诺塔移动过程 (1)
- PHP中include和require (1)
- 试用CountDownLatch的副成品,多线程群发邮件小程序 (1)
- 金山词霸2005采用新的防止盗版的方法及简单解决方法 (1)
- 如何每天多给自己一小时? (1)
- 时间管理101招 (1)
- Eclipse扩展点笔记 (1)
- ERROR: the user data image is used by another emulator. aborting (1)
- GML对象的层次结构 (1)
- Java读取Word/Excel/PDF可以使用的第三方包 (1)
- 海水与火焰——领导眼中两种不同类型的员工 (1)
- 攘外必先安内 稳定才能发展 员工也是上帝 (1)
- 基于SVG技术实现WebGIS的基本功能(2) (1)
- MapXtreme2004代码 几个地图工具的使用(C#) (1)
- C#编写最小化到系统托盘的Windows应用程序 (1)
- iOS开发之详解剪贴板 (1)
- iOS开发之结合asp.net webservice实现文件上传下载 (1)
- VS2008 环境中完美搭建 Qt 4.7.4 静态编译的调试与发布 (1)
- wp数据库方案 (1)
- No action instance for path /leftTreeMenu could be created (1)
- OracleOraDb10g_home1TNSListener服务启动后又停止了 (1)
- 将多个Excel文件合并成一个的源码 (1)
- 悲催的this悲催的new (1)
- 搜索maven依赖的网站推荐 (1)
- Errors occurred during the build. Errors running builder 'JavaScript Validator' (1)
- [转]PKCS12 证书的生成及验证 (1)
- android: not find device (1)
- [转载]对session和cookie的一些理解 (1)
- 域名选择的那些事 (1)
- EJB 调用原理及原因 (1)
最新评论
-
houxinyou:
不论做员工还是做领导,我都喜欢海水!如果每个人都把该自己做的事 ...
海水与火焰——领导眼中两种不同类型的员工 -
zui4yi1:
可以推广到各行各业。
攘外必先安内 稳定才能发展 员工也是上帝
在iOS中,可以使用剪贴板实现应用程序之中以及应用程序之间实现数据的共享。比如你可以从iPhone QQ复制一个url,然后粘贴到safari浏览器中查看这个链接的内容。
<h1>概述</h1>
在iOS中下面三个控件,自身就有复制-粘贴的功能:
1、UITextView<br>
2、UITextField<br>
3、UIWebView
UIKit framework提供了几个类和协议方便我们在自己的应用程序中实现剪贴板的功能。
1、UIPasteboard:我们可以向其中写入数据,也可以读取数据
2、UIMenuController:显示一个快捷菜单,用来复制、剪贴、粘贴选择的项。
3、UIResponder中的 canPerformAction:withSender:用于控制哪些命令显示在快捷菜单中。
4、当快捷菜单上的命令点击的时候,UIResponderStandardEditActions将会被调用。
下面这些项能被放置到剪贴板中
1、UIPasteboardTypeListString — 字符串数组, 包含kUTTypeUTF8PlainText<br>
2、UIPasteboardTypeListURL — URL数组,包含kUTTypeURL<br>
3、UIPasteboardTypeListImage — 图形数组, 包含kUTTypePNG 和kUTTypeJPEG<br>
4、UIPasteboardTypeListColor — 颜色数组
剪贴板的类型分为两种:
系统级:使用UIPasteboardNameGeneral和UIPasteboardNameFind,系统级应用程序关闭,或者卸载的数据不会丢失。
应用程序级:通过设置,可以让数据在应用程序关闭之后仍然保存在剪贴板中,但是应用程序卸载之后数据就会失去。我们可用通过pasteboardWithName:create:来创建。
了解这些之后,下面通过一系列的例子来说明如何在应用程序中使用剪贴板。
<h1>例子:</h1>
<h2>一、复制剪贴文本。</h2>
下面通过一个例子,可以在tableview上显示一个快捷菜单,上面只有复制按钮,复制tableview上的数据之后,然后粘贴到title上。
<h3>定义一个单元格类CopyTableViewCell,在这个类的上显示快捷菜单,实现复制功能。</h3>
@interface CopyTableViewCell : UITableViewCell {<br>
id delegate;<br>
}<br>
@property (nonatomic, retain) id delegate;<br>
@end
<br>
<h3>实现CopyTableViewCell ,实现粘贴:</h3>
<textarea readonly name="code" class="plain">#import "CopyTableViewCell.h"
@implementation CopyTableViewCell
@synthesize delegate;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
}
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
[[self delegate] performSelector:@selector(showMenu:)
withObject:self afterDelay:0.9f];
[super setHighlighted:highlighted animated:animated];
}
- (BOOL)canBecomeFirstResponder
{
return YES;
}
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
if (action == @selector(cut:)){
return NO;
}
else if(action == @selector(copy:)){
return YES;
}
else if(action == @selector(paste:)){
return NO;
}
else if(action == @selector(select:)){
return NO;
}
else if(action == @selector(selectAll:)){
return NO;
}
else
{
return [super canPerformAction:action withSender:sender];
}
}
- (void)copy:(id)sender {
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
[pasteboard setString:[[self textLabel]text]];
}
- (void)dealloc {
[super dealloc];
}
@end
</textarea>定义CopyPasteTextController
<textarea readonly name="code" class="plain">@interface CopyPasteTextController : UIViewController<UITableViewDelegate> {
//用来标识是否显示快捷菜单
BOOL menuVisible;
UITableView *tableView;
}
@property (nonatomic, getter=isMenuVisible) BOOL menuVisible;
@property (nonatomic, retain) IBOutlet UITableView *tableView;
@end </textarea>实现CopyPasteTextController :
<textarea readonly name="code" class="plain">#import "CopyPasteTextController.h"
#import "CopyTableViewCell.h"
@implementation CopyPasteTextController
@synthesize menuVisible,tableView;
- (void)viewDidLoad {
[super viewDidLoad];
[self setTitle:@"文字复制粘贴"];
//点击这个按钮将剪贴板的内容粘贴到title上
UIBarButtonItem *addButton = [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
target:self
action:@selector(readFromPasteboard:)]
autorelease];
[[self navigationItem] setRightBarButtonItem:addButton];
}
// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 9;
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier =@"Cell";
CopyTableViewCell *cell = (CopyTableViewCell *)[tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[CopyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
[cell setDelegate:self];
}
// Configure the cell.
NSString *text = [NSString stringWithFormat:@"Row %d", [indexPath row]];
[[cell textLabel] setText:text];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if([self isMenuVisible])
{
return;
}
[[[self tableView] cellForRowAtIndexPath:indexPath] setSelected:YES
animated:YES];
}
//显示菜单
- (void)showMenu:(id)cell {
if ([cell isHighlighted]) {
[cell becomeFirstResponder];
UIMenuController * menu = [UIMenuController sharedMenuController];
[menu setTargetRect: [cell frame] inView: [self view]];
[menu setMenuVisible: YES animated: YES];
}
}
- (void)readFromPasteboard:(id)sender {
[self setTitle:[NSString stringWithFormat:@"Pasteboard = %@",
[[UIPasteboard generalPasteboard] string]]];
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Relinquish ownership any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload
{
[super viewDidUnload];
[self.tableView release];
// Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
// For example: self.myOutlet = nil;
}</textarea><br>
<h2>效果:</h2>
<h3>复制一行数据:</h3>
<img alt="" src="http://hi.csdn.net/attachment/201108/4/0_131246128526sB.gif">
<h3>点击右上角的按钮粘贴,将数据显示在title上:</h3>
<img alt="" src="http://hi.csdn.net/attachment/201108/4/0_13124612934www.gif">
<h2>二、图片复制粘贴</h2>
下面通过一个例子,将图片复制和剪贴到另外一个UIImageView中间。
<h3>1、在界面上放置两个uiimageview,一个是图片的数据源,一个是将图片粘贴到的地方。CopyPasteImageViewController 代码如下:<br>
</h3>
<textarea readonly name="code" class="plain">@interface CopyPasteImageViewController : UIViewController {
UIImageView *imageView;
UIImageView *pasteView;
UIImageView *selectedView;
}
@property (nonatomic, retain) IBOutlet UIImageView *imageView;
@property (nonatomic, retain) IBOutlet UIImageView *pasteView;
@property (nonatomic, retain) UIImageView *selectedView;
- (void)placeImageOnPasteboard:(id)view;
@end
</textarea><h3>
<br>
2、当触摸图片的时候我们显示快捷菜单:</h3>
<textarea readonly name="code" class="plain">- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
NSSet *copyTouches = [event touchesForView:imageView];
NSSet *pasteTouches = [event touchesForView:pasteView];
[self becomeFirstResponder];
if ([copyTouches count] > 0) {
[self performSelector:@selector(showMenu:)
withObject:imageView afterDelay:0.9f];
}
else if([pasteTouches count] > 0) {
[self performSelector:@selector(showMenu:)
withObject:pasteView afterDelay:0.9f];
}
[super touchesBegan:touches withEvent:event];
}
- (void)showMenu:(id)view {
[self setSelectedView:view];
UIMenuController * menu = [UIMenuController sharedMenuController];
[menu setTargetRect: CGRectMake(5, 10, 1, 1) inView: view];
[menu setMenuVisible: YES animated: YES];
}</textarea><br>
这里的快捷菜单,显示三个菜单项:剪贴、粘贴、复制:
<textarea readonly name="code" class="plain">- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
if (action == @selector(cut:)) {
return ([self selectedView] == imageView) ? YES : NO;
} else if (action == @selector(copy:)) {
return ([self selectedView] == imageView) ? YES : NO;
} else if (action == @selector(paste:)) {
return ([self selectedView] == pasteView) ? YES : NO;
} else if (action == @selector(select:)) {
return NO;
} else if (action == @selector(selectAll:)) {
return NO;
} else {
return [super canPerformAction:action withSender:sender];
}
}
- (void)cut:(id)sender {
[self copy:sender];
[imageView setHidden:YES];
}
- (void)copy:(id)sender {
[self placeImageOnPasteboard:[self imageView]];
}
- (void)paste:(id)sender {
UIPasteboard *appPasteBoard =
[UIPasteboard pasteboardWithName:@"CopyPasteImage" create:YES];
NSData *data =[appPasteBoard dataForPasteboardType:@"com.marizack.CopyPasteImage.imageView"];
pasteView.image = [UIImage imageWithData:data];
}</textarea><h2>
<br>
效果:</h2>
<h3>1、点击图片,显示菜单按钮。</h3>
<img alt="" src="http://hi.csdn.net/attachment/201108/4/0_1312461301aoIY.gif">
<h3>2、点击复制,将数据复制到剪贴板上:</h3>
<img alt="" src="http://hi.csdn.net/attachment/201108/4/0_13124613107V0o.gif">
<h3>3、点击粘贴,将数据粘贴到uiimageview上。</h3>
<img alt="" src="http://hi.csdn.net/attachment/201108/4/0_1312461318P57J.gif">
<h1>总结:</h1>
本文详解了iOS系统应用程序中如何使用剪贴板。
发表评论
-
EJB 调用原理及原因
2012-02-04 15:03 1076这里就结合WebSphere ... -
域名选择的那些事
2012-02-04 14:08 980自从打定主意要自 ... -
[转载]对session和cookie的一些理解
2012-02-03 16:24 769由于项目需要,最近用session容器比较多,传载的同 ... -
android: not find device
2012-02-02 14:14 752每次修改framework/base/core/... ... -
[转]PKCS12 证书的生成及验证
2012-02-02 13:29 4936http://blog.csdn.net/kmyhy/ ... -
Errors occurred during the build. Errors running builder 'JavaScript Validator'
2012-01-31 14:53 20599<p>在myeclipse自动编译的时候, ... -
搜索maven依赖的网站推荐
2012-01-31 14:33 1083 &nb ... -
悲催的this悲催的new
2012-01-31 14:28 745今天才发现,原来我对this的理解竟然如此模糊,原来我 ... -
将多个Excel文件合并成一个的源码
2012-01-11 11:34 9170源码是在poi-3.1-FINAL-20080629版 ... -
OracleOraDb10g_home1TNSListener服务启动后又停止了
2011-12-28 15:58 1668Oracle 启动报错:OracleOraDb10g_ ... -
No action instance for path /leftTreeMenu could be created
2011-12-28 12:33 1278<span style="font-f ... -
wp数据库方案
2011-12-21 15:49 1338----------->转帖: <div ... -
VS2008 环境中完美搭建 Qt 4.7.4 静态编译的调试与发布
2011-12-20 14:43 4601[size=18px;]为什么要在VS2008中使用 ... -
iOS开发之结合asp.net webservice实现文件上传下载
2011-12-19 15:09 3692iOS开发中会经常用到文件上传下载的功能,这篇文件将介 ... -
C#编写最小化到系统托盘的Windows应用程序
2011-12-15 13:59 989</span></span>& ... -
MapXtreme2004代码 几个地图工具的使用(C#)
2011-12-15 11:29 716<p class="MsoNormal ... -
基于SVG技术实现WebGIS的基本功能(2)
2011-12-14 13:34 515<p class="MsoNorma ... -
攘外必先安内 稳定才能发展 员工也是上帝
2011-12-14 09:04 1008不少公司都有顾客满意度的调查。在年初时候设定一个目标, ... -
海水与火焰——领导眼中两种不同类型的员工
2011-12-13 09:54 948头一段时间,业务扩大,一个Team拆分成两个Team。 ... -
Java读取Word/Excel/PDF可以使用的第三方包
2011-12-13 09:24 1011读取Word文档: tm-extractors.jar ...
相关推荐
iOS软件开发之详解剪贴板.pdf
深入讲解iOS开发入门以及应用,重点讲解了UI设计方面的相关基础及实例;包含多套原版资料以及详实的案例分享,可查看同名资料,绝对超值。
ios+android+h5复制剪切板
iOS开发之美光盘源代码,由于视频太大,没有上传。
史上最全的IOS开发流程详解(绝密),详细描述了,IOS,注册账号,到上传包文件的整个过程。
《iOS7:iPhone/iPad应用开发技术详解》主要该书最后两章,主要两个示例的源代码是以XCode 5.2下进行调试通过,其中还包含了第19章,针对Xcode 5.2进行修改和调试的文档,密码,请根据该书提供的BLOG,获取密码
该文档是我在做完一个地图导航的项目之后做的一个总结!主要介绍如何使用iphone中的mapkit进行地图或者导航的开发!如果能下载到掌中全房这个iphone手机上的应用,可以参照的看!
ios开发之归档
唐巧的《iOS开发进阶》,希望对一些初级的程序员有用
第一部分介绍iOS 开发的常用工具,第二部分介绍iOS开发中的一些常见的实践经验,第三部分介绍iOS 开发中涉及的原理。 如果把成为iOS 开发高手的过程比作武侠小说中的修炼过程的话,工具、实践和理论的学习就分别对应...
在unity中,将文本复制到IOS剪贴板,可以使用原生的剪切板
全书分为两篇共18章,基础篇详细讲解了iOS技术概述、网页设计基础、HTML5基础、为iOS开发一个简单网页、移动化页面布局、设置导航、图片处理、设置文字、设置表单、实现搜索、分类和过滤效果、图表、HTML5在移动领域...
资源名称:《iOS开发零基础入门教程》(40集)资源目录:【】传智播客《iOS开发零基础入门教程》1.1【】传智播客《iOS开发零基础入门教程》1.2【】传智播客《iOS开发零基础入门教程》1.3【】传智播客《iOS开发零基础...
IOS UICollectionView布局详解
资源名称:iOS开发视频教程资源目录:【】iOS开发视频教程-第01讲-iOS历史介绍【】iOS开发视频教程-第02讲-XCode安装【】iOS开发视频教程-第03讲-UIView_PPT【】iOS开发视频教程-第04讲-UILabel【】iOS开发视频教程-...
ios开发流程ios开发流程
iOS开发网络数据之AFNetworking使用,没有积分的可以在对应文章下评论留下邮箱; 文章地址:http://blog.csdn.net/daiyelang/article/details/38421341