iOS剪切板 UIPasteboard

简介: 1、前言 iOS在某些特定时刻需要把内容重一个app拷贝到另一个app 这时候我们就可以使用剪切板UIPasteboard 2、iOS自带剪切板操作的原生UI控件 在iOS中下面三个控件,自身就有复制-粘贴的功能: (1)、UITextView (2)、UITextField (3)、UIWebView 3、系统的剪切板UIPasteboard



1、前言

iOS在某些特定时刻需要把内容重一个app拷贝到另一个app 这时候我们就可以使用剪切板UIPasteboard

2、iOS自带剪切板操作的原生UI控件

在iOS中下面三个控件,自身就有复制-粘贴的功能: (1)、UITextView (2)、UITextField (3)、UIWebView

3、系统的剪切板UIPasteboard

UIPasteboard类有3个初始化方法:

//获取系统级别的剪切板
+ (UIPasteboard *)generalPasteboard;
//获取一个自定义的剪切板 name参数为此剪切板的名称 create参数用于设置当这个剪切板不存在时 是否进行创建
+ (nullable UIPasteboard *)pasteboardWithName:(NSString *)pasteboardName create:(BOOL)create;
//获取一个应用内可用的剪切板
+ (UIPasteboard *)pasteboardWithUniqueName;

上面3个初始化方法,分别获取或创建3个级别不同的剪切板,系统级别的剪切板在整个设备中共享,即是应用程序被删掉,其向系统级的剪切板中写入的数据依然在。自定义的剪切板通过一个特定的名称字符串进行创建,它在应用程序内或者同一开发者开发的其他应用程序中可以进行数据共享。第3个方法创建的剪切板等价为使用第2个方法创建的剪切板,只是其名称字符串为nil,它通常用于当前应用内部。

注意:使用第3个方法创建的剪切板默认是不进行数据持久化的,及当应用程序退出后,剪切板中内容将别抹去。若要实现持久化,需要设置persistent属性为YES。

UIPasteboard中常用方法及属性如下:
//剪切板的名称
@property(readonly,nonatomic) NSString *name;
//根据名称删除一个剪切板
+ (void)removePasteboardWithName:(NSString *)pasteboardName;
//是否进行持久化
@property(getter=isPersistent,nonatomic) BOOL persistent;
//此剪切板的改变次数 系统级别的剪切板只有当设备重新启动时 这个值才会清零
@property(readonly,nonatomic) NSInteger changeCount;

下面这些方法用于设置与获取剪切板中的数据:

最新一组数据对象的存取:

//获取剪切板中最新数据的类型
- (NSArray<NSString> *)pasteboardTypes;
//获取剪切板中最新数据对象是否包含某一类型的数据
- (BOOL)containsPasteboardTypes:(NSArray<NSString> *)pasteboardTypes;
//将剪切板中最新数据对象某一类型的数据取出
- (nullable NSData *)dataForPasteboardType:(NSString *)pasteboardType;
//将剪切板中最新数据对象某一类型的值取出
- (nullable id)valueForPasteboardType:(NSString *)pasteboardType;
//为剪切板中最新数据对应的某一数据类型设置值
- (void)setValue:(id)value forPasteboardType:(NSString *)pasteboardType;
//为剪切板中最新数据对应的某一数据类型设置数据
- (void)setData:(NSData *)data forPasteboardType:(NSString *)pasteboardType;

多组数据对象的存取:

//数据组数
@property(readonly,nonatomic) NSInteger numberOfItems;
//获取一组数据对象包含的数据类型
- (nullable NSArray *)pasteboardTypesForItemSet:(nullable NSIndexSet*)itemSet;
//获取一组数据对象中是否包含某些数据类型
- (BOOL)containsPasteboardTypes:(NSArray<NSString> *)pasteboardTypes inItemSet:(nullable NSIndexSet *)itemSet;
//根据数据类型获取一组数据对象
- (nullable NSIndexSet *)itemSetWithPasteboardTypes:(NSArray *)pasteboardTypes;
//根据数据类型获取一组数据的值
- (nullable NSArray *)valuesForPasteboardType:(NSString *)pasteboardType inItemSet:(nullable NSIndexSet *)itemSet;
//根据数据类型获取一组数据的NSData数据
- (nullable NSArray *)dataForPasteboardType:(NSString *)pasteboardType inItemSet:(nullable NSIndexSet *)itemSet;
//所有数据对象
@property(nonatomic,copy) NSArray *items;
//添加一组数据对象
- (void)addItems:(NSArray<NSDictionary> *> *)items;

上面方法中很多需要传入数据类型参数,这些参数是系统定义好的一些字符窜,如下:

//所有字符串类型数据的类型定义字符串数组
UIKIT_EXTERN NSArray<NSString> *UIPasteboardTypeListString;
//所有URL类型数据的类型定义字符串数组
UIKIT_EXTERN NSArray<NSString> *UIPasteboardTypeListURL;
//所有图片数据的类型定义字符串数据
UIKIT_EXTERN NSArray<NSString> *UIPasteboardTypeListImage;
//所有颜色数据的类型定义字符串数组
UIKIT_EXTERN NSArray<NSString> *UIPasteboardTypeListColor;

相比于上面两组方法,下面这些方法更加面向对象,在开发中使用更加方便与快捷:

//获取或设置剪切板中的字符串数据
@property(nullable,nonatomic,copy) NSString *string;
//获取或设置剪切板中的字符串数组
@property(nullable,nonatomic,copy) NSArray<NSString> *strings;
//获取或设置剪切板中的URL数据
@property(nullable,nonatomic,copy) NSURL *URL;
//获取或设置剪切板中的URL数组
@property(nullable,nonatomic,copy) NSArray<NSURL> *URLs;
//获取或s何止剪切板中的图片数据
@property(nullable,nonatomic,copy) UIImage *image;
//获取或设置剪切板中的图片数组
@property(nullable,nonatomic,copy) NSArray<UIImage> *images;
//获取或设置剪切板中的颜色数据
@property(nullable,nonatomic,copy) UIColor *color;
//获取或设置剪切板中的颜色数组
@property(nullable,nonatomic,copy) NSArray<UIColor> *colors;

对剪切板的某些操作会触发如下通知:

//剪切板内容发生变化时发送的通知
UIKIT_EXTERN NSString *const UIPasteboardChangedNotification;
//剪切板数据类型键值增加时发送的通知
UIKIT_EXTERN NSString *const UIPasteboardChangedTypesAddedKey;
//剪切板数据类型键值移除时发送的通知
UIKIT_EXTERN NSString *const UIPasteboardChangedTypesRemovedKey;
//剪切板被删除时发送的通知
UIKIT_EXTERN NSString *const UIPasteboardRemovedNotification;

未完待续...



目录
相关文章
|
开发者 iOS开发
iOS剪切板UIPasteboard开发应用解析(二)
iOS剪切板UIPasteboard开发应用解析
285 0
iOS剪切板UIPasteboard开发应用解析(二)
|
iOS开发
iOS剪切板UIPasteboard开发应用解析(一)
iOS剪切板UIPasteboard开发应用解析
324 0
iOS剪切板UIPasteboard开发应用解析(一)
|
存储 iOS开发
iOS - UIPasteboard
前言 NS_CLASS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED __WATCHOS_PROHIBITED @interface UIPasteboard : NSObject 1、UIPasteboard 简介 顾名思义,UIPasteboard 是剪切板功能,因为 iOS 的原生控件 UITextField、UITextView、UIWebView,我们在使用时如果长按,就会出现复制、剪切、选中、全选、粘贴等功能,这个就是利用了系统剪切板功能来实现的,而每一个 App 都可以去访问系统剪切板。
1026 0
|
18天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
9天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
11天前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
26天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
45 9
|
22天前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!