iOS开发_iphone 实现剪贴板操作_iphone 复制粘贴功能

iOS小功能备忘----实现文字复制到粘贴板 今天,我们一起来学习在iOS中如何自定义将文字复制到粘贴板。 在iOS中有三个控件自身就有复制-粘贴的功能:UITextView、UITextField和UIWebView。在这里,我们自定义一个button实现将label中的文字复制到粘贴板中。 首先创建一个工程, 阅读详情

在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:来创建。

了解这些之后,下面通过一系列的例子来说明如何在应用程序中使用剪贴板


例子:

1、复制剪贴文本。

    下面通过一个例子,可以在tableview上显示一个快捷菜单,上面只有复制按钮,复制tableview上的数据之后,然后粘贴到title上。

定义一个单元格类CopyTableViewCell,在这个类的上显示快捷菜单,实现复制功能。

@interface CopyTableViewCell : UITableViewCell {     
	id delegate; 
} 
@property (nonatomic, retain) id delegate; 
@end

//实现CopyTableViewCell :

#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
 
//定义CopyPasteTextController,实现粘贴功能。
@interface CopyPasteTextController : UIViewController<UITableViewDelegate> {     
	//用来标识是否显示快捷菜单     
	BOOL menuVisible;     
	UITableView *tableView; 
}  
@property (nonatomic, getter=isMenuVisible) BOOL menuVisible;  
@property (nonatomic, retain) IBOutlet UITableView *tableView; 
@end 

实现CopyPasteTextController :

#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; 
}


效果:

复制一行数据:

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

2、图片复制粘贴

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

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

@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


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

- (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]; 
}

这里的快捷菜单,显示三个菜单项:剪贴、粘贴、复制:
- (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]; }


效果:

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

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

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


iOS开发之复制粘贴 剪切 UIPasteboard:剪切板                 用来向其中写入数据以及从中读取数据,从来实现数据的”搬迁”。UIMenuController:编辑菜单     用来显示拷贝、黏贴等命令canPerformAction:withSender::用于控制编辑菜单显示的命令按钮。事实上,编辑菜单的命令按钮完全可以自定义,而无需通过实现canPerformAction:方法来控制 阅读详情

相关推荐

iOS开发 UILabel长按弹出复制选项-UIContextMenuInteraction

UILabel通过UIContextMenuInteraction实现长按弹出复制选项。

iOS15011015的博客 1465

iOS 开发复制字符串去粘贴

我整理的一些关于【字符串】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1iOS 开发:复制字符串与粘贴功能的实现 在iOS开发中,复制和粘贴是非常常用的功能,尤其是在文本处理的应用中。本文将探讨如何在iOS中实现复制和粘贴字符串的功能。我们将通过实际的代码示例来...

weixin_40725370的博客 417

iOS剪贴板高效使用技巧与进阶玩法

剪贴板作为操作系统基础功能,其底层原理涉及内存管理、进程通信等核心技术。现代操作系统通过优化数据传输协议和内存分配策略,显著提升了剪贴板的性能和安全性。iOS系统从15版本开始,对剪贴板功能进行了多项底层改进,包括跨设备同步速度提升和大文本处理能力增强。这些优化为移动办公、跨设备协作等场景带来显著效率提升。在实际应用中,用户可以通过三指手势操作、快捷指令自动化等方式充分发挥剪贴板潜力。针对开发者,Xcode提供的剪贴板监控功能可以实现更高级的数据传递和测试自动化。合理使用剪贴板功能不仅能提升日常操作效率,在

weixin_34162228的博客 556

iOS 复制到剪贴板

1.概述 UIPasteboard是ios中访问粘贴板的原生控件,可分为系统等级的和app等级的,系统等级的独立于app,可以复制一个app的内容到另一个app;app等级的只能在app内进行复制和粘贴;。2.数据类型 可以复制在粘贴板的数据类型有NSString、UIImage、NSURL、UIColor、NSData以及由这些类型元素组成的数组。可分别由它们的set方法将数据放在粘贴板中,如

meiyulong518的博客 950

iOS跨应用复制粘贴解决方案与技术实现

剪贴板作为操作系统基础功能,承担着应用间数据传递的关键角色。其核心原理是通过系统级缓冲区临时存储用户复制的数据,再通过粘贴操作传递给目标应用。在iOS生态中,由于沙盒安全机制的限制,剪贴板成为少数合法的跨应用通信通道之一。技术实现上,开发者可以通过UIPasteboard API访问剪贴板内容,而iOS 14之后引入的隐私提示机制进一步规范了剪贴板访问行为。针对常见的格式兼容性问题,采用UTI(Uniform Type Identifier)系统能有效处理文本、RTF、PDF等不同数据类型。在企业级场景中,

weixin_34072458的博客 402

iPhone上Flutter App输入框复制粘贴按钮文字显示问题...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 623

iOS开发_iPhone 实现剪贴板操作_iPhone 复制粘贴功能

在iOS中,可以使用剪贴板实现应用程序之中以及应用程序之间实现数据的共享。比如你可以从iPhone QQ复制一个url,然后粘贴到safari浏览器中查看这个链接的内容。 一、在iOS中下面三个控件,自身就有复制-粘贴的功能: 1、UITextView 2、UITextField 3、UIWebView 二、UIKit framework提供了几个类和协议方便我们在自己的应用

lihaoyuan1993的博客 915

matlab锅炉 pid仿真,基于Matlab锅炉仿真.doc

基于Matlab锅炉仿真内蒙古科技大学MATLAB课程设计任务书2012题 目:锅炉汽包水位控制系统学生姓名:林三彪学 号:0967112127专 业:测控技术与仪器班 级:2009-1指导教师:梁 丽摘 要锅炉是化工、炼油、发电、造纸和制糖等工业生产过程中必不可少的重要动力设备。锅炉往往成了不少工厂不可缺少的一部分,因而,对锅炉设备中的自动控制系统进行分析研究是必要的...

weixin_29133981的博客 1096

ios开发读取剪切板的内容_iOS开发_iphone 实现剪贴板操作_iphone 复制粘贴功能(转)...

在iOS中,可以使用剪贴板实现应用程序之中以及应用程序之间实现数据的共享。比如你可以从iPhone QQ复制一个url,然后粘贴到safari浏览器中查看这个链接的内容。一、在iOS中下面三个控件,自身就有复制-粘贴的功能:1、UITextView2、UITextField3、UIWebView二、UIKit framework提供了几个类和协议方便我们在自己的应用程序中实现剪贴板的功能。1、UI...

weixin_39602560的博客 1096

Zemax光机热集成分析:从FEA数据导入到光学性能评估实战

在精密光学系统设计中,环境温度变化和机械应力是导致像质恶化的关键因素,这涉及到光、机、热多物理场的耦合分析。其核心原理在于,通过有限元分析(FEA)软件(如ANSYS)模拟热与力学载荷下的结构变形和温度分布,并将这些物理场数据精准映射到光学设计软件(如Zemax)中,以评估其对调制传递函数(MTF)、点列图等核心光学指标的影响。这项技术的工程价值在于,它使设计从静态的理想模型跃升至动态的工程现实,能够在设计阶段就预测并补偿环境扰动,从而显著提升光学系统在航空航天、车载镜头、高功率激光等严苛工况下的可靠性与稳

weixin_30565327的博客 356

无线Mesh组网全攻略:从原理、部署到调优与排障

对于布线困难的大户型、复式楼或园区,传统的无线中继往往面临带宽减半和链路不稳定的问题。无线Mesh网络通过多跳转发与自组织路由,让每个节点无需网线即可协作扩展覆盖,并依靠动态路径选择实现自愈。其核心技术涉及802.11s、HWMP路由协议,以及802.11k/v/r协同的无缝漫游,能有效提升终端切换体验。在实际部署中,设备选型、回程频段规划与布点位置直接决定网络质量。围绕无线Mesh的组网原理、设备选型、配置调优与故障排查,提供一套工程实践参考,帮助用户在复杂环境下构建稳定高效的无缝覆盖。

weixin_34098209的博客 270

iOS开发_iphone 实现剪贴板操作_iphone 复制粘贴功能(转)

在iOS中,可以使用剪贴板实现应用程序之中以及应用程序之间实现数据的共享。比如你可以从iPhone QQ复制一个url,然后粘贴到safari浏览器中查看这个链接的内容。 一、在iOS中下面三个控件,自身就有复制-粘贴的功能: 1、UITextView2、UITextField3、UIWebView 二、UIKit framework提供了几个类和协议方便我们在自己的应用程序中实现剪贴板...

weixin_30349597的博客 157

Abaqus 导出单元刚度矩阵和全局刚度矩阵

Abaqus 导出单元刚度矩阵和全局刚度矩阵

科技芯风 1万+

iphone开发之剪贴板详解

在iOS中,可以使用剪贴板实现应用程序之中以及应用程序之间实现数据的共享。比如你可以从iPhone QQ复制一个url,然后粘贴到safari浏览器中查看这个链接的内容。 概述    在iOS中下面三个控件,自身就有复制-粘贴的功能: 1、UITextView 2、U

KylinBL的专栏 2864

【YOLO系列】YOLOv11详解:模型结构、损失函数、训练方法及代码实现

YOLOv11在目标检测领域实现重大突破,通过动态骨干网络(Dyna-Backbone)和FPN++架构,在保持高帧率(≥60FPS)的同时提升小目标检测精度(AP_S提升5.6%)。创新采用CIoU++损失函数和类别平衡Focal Loss,结合Mosaic-Plus数据增强,参数量减少18%至6.5M。实验显示,该模型在COCO数据集上实现更高mAP,特别适合移动端部署,Jetson Xavier平台能耗比优化至3.2W·ms⁻¹,支持目标检测、实例分割等多任务场景。关键创新包括动态深度调整和双向特征金

一碗白开水一 3443

uniapp - 解决报错 canvasToTempFilePath: fail canvas is empty 画布为空错误,生成海报相册、二维码、条码、裁剪/拼合操作图片报错,加了this还是报错

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,canvasToTempFilePath:失败画布为空,报错,canvasToTempFilePath:failcanvasisempty,不支持2d,还是报错,this,加上this还是报错,vue3没有this怎么办?海报,保存到手机相册,生成二维码,显示条码,图像裁切,图片处理,canvas报错,无法解决,还是fail,依然报错,传了this也不好使,Uniapp小程序,如何解决这个问题

🏆 前端领域优质创作者 4706

苹果手机拷贝功能 php,苹果iPhone上的“通用剪贴板”到底是什么?

原标题:苹果iPhone上的“通用剪贴板”到底是什么?无论是使用电脑,还是手机时,总是会离不开【拷贝与粘贴】这二功能命令的。比如在手机上复制一条短信、微信、文字内容,然后再转发给其他人。同样地,在电脑上也会经常用到这二个功能。在以前,想要把 iPhone 上的内容移动到电脑上,只能是通过以消息转发的形式,比如iMessage、微信、QQ、以及备忘录同步等方式。 苹果在今年6月份的 WWDC 大会上...

weixin_42508215的博客 1109

Windows系统下载安装 Git 的详细教程

本文详细介绍了Windows系统下载安装Git的完整流程,包括从Git官方网站和阿里镜像下载安装包,逐步讲解安装向导中的各个设置选项,如安装路径、默认编辑器、行尾转换、终端模拟器等,并提供了每个步骤的截图和说明。安装完成后,博客还介绍了如何验证安装是否成功,以及如何配置Git的用户名和邮箱,确保可以正常使用Git进行版本控制。

加斯顿工程师的博客 796

苹果回应微软请求,2027 年秋或推 iPhone 与 Windows PC 跨设备剪贴板功能

同时,该功能需要获得用户的许可,才能将其剪贴板内容与配对设备共享。此前,欧盟对联网设备的规定已迫使苹果让其功能与第三方可穿戴设备更好地兼容,例如在欧盟地区为更多类型的智能手表和耳塞引入通知支持、近距离配对和自动音频切换等功能。今年 3 月,微软向苹果提交互操作性请求,指出目前 iOS 系统对剪贴板访问的限制,阻碍了第三方开发者在其设备上使用跨设备复制和粘贴功能。苹果此次开发跨设备剪贴板功能是在欧盟法规和微软诉求下的必然之举,虽面临工程挑战,但有望提升用户体验,增强苹果设备与第三方的兼容性,拓展市场竞争力。

IT界那些事儿 17

【原理图PCB专题】Cadence17.4 PCB位号重排与反标

Cadence17.4 PCB位号重排与反标比Cadence16版本更简单一些,那到底如何操作?

一点硬件 1181

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: UIMenuController的使用,对UILabel拷贝以及定制菜单
下一篇: 关于iPhone的UIView刷新
我是一只懒虫
博客等级 码龄17年 147粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值