博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS—UIPasteboard使用注意事项
阅读量:6526 次
发布时间:2019-06-24

本文共 3396 字,大约阅读时间需要 11 分钟。

初始化方法

UIPasteboard 的初始化方法主要有3类

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

上面3个初始化方法,分别获取或创建3个级别不同的剪切板,下面我们详解一下在什么情况下用哪种初始化方法

+ (UIPasteboard *)generalPasteboard;

系统级别的剪切板在整个设备中共享,而且会持久化,即应用程序被删掉,其向系统级的剪切板中写入的数据依然在。

+ (nullable UIPasteboard *)pasteboardWithName:(NSString *)pasteboardName create:(BOOL)create;自定义的剪切板通过一个特定的名称字符串进行创建,它在应用程序内或者同一开发者开发(必须Bundle Identifier 例com.maoshaoqian.** 星号前部一样)的其他应用程序中可以进行数据共享。举个例子:比如你开发了多款应用,用户全部下载了,在A应用中用户拷贝了一些数据(为了数据安全,不用系统级别的Pasteboard),在打开B应用时就会自动识别,提高用户体验。

注意:要使用不同app共享的话,注意上面加粗的部分,很重要!

+ (UIPasteboard *)pasteboardWithUniqueName;第3个方法创建的剪切板等价为使用第2个方法创建的剪切板,只是其名称字符串为nil,它通常用于当前应用内部。(当然也可以跨应用使用,但必须Bundle Identifier 例com.maoshaoqian.** 星号前部一样

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

使用剪贴板实例

使用剪贴板,如果需要app间共享

1、不能覆盖原剪贴板信息,比如(淘口令)信息

2、自己写入的业务需要相互覆盖
3、不同的业务,不能相互覆盖,只能增加
4、基本逻辑就是,读取剪贴板,识别自身业务信息,做覆盖或者添加后,再次写入
5、剪贴板无增加信息的API,只有全部覆盖

//根据业务Key,读取剪贴板-(NSDictionary*)readUIPasteboardBizKey:(NSString*)key{    UIPasteboard *sysPasteboard = [UIPasteboard generalPasteboard];    __block NSDictionary *result = nil;    if(sysPasteboard.hasStrings){        [sysPasteboard.strings enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {            if([obj containsString:@"ALIBC2017AFC"]){                NSDictionary *dicFromPasteboard =[self dictionaryWithString:obj];                result = dicFromPasteboard[key];                *stop = YES;            }        }];    }    return result;}//写入剪贴板格式{"flag":"ALIBC2017AFC","updateDate":${更新时间},${业务key}:${业务数据,map类型}}//根据业务Key,写入业务数据到剪贴板-(void)testUIPasteboardBizKey:(NSString*)key data:(NSDictionary*)dic{    UIPasteboard *sysPasteboard = [UIPasteboard generalPasteboard];    if(sysPasteboard.hasStrings){        __block BOOL hasBCDataInPasteboard = NO;        [sysPasteboard.strings enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {            if([obj containsString:@"ALIBC2017AFC"]){                NSDictionary *dicFromPasteboard = [self dictionaryWithString:obj];                [dicFromPasteboard setValue:dic forKey:key];                NSString *bizStr =[self stringWithDictionary:dicFromPasteboard];                NSMutableArray *array = [NSMutableArray arrayWithArray:sysPasteboard.strings];                [array replaceObjectAtIndex:idx withObject:bizStr];                sysPasteboard.strings = array;                hasBCDataInPasteboard = YES;                *stop = YES;            }        }];        if(!hasBCDataInPasteboard){            NSString *bizStr = [self stringWithDictionary:@{@"flag":@"ALIBC2017AFC",@"updateDate":[NSDate date],key:dic}];            sysPasteboard.strings = [sysPasteboard.strings arrayByAddingObject:bizStr];        }    }else{        NSString *bizStr = [self stringWithDictionary:@{@"flag":@"ALIBC2017AFC",@"updateDate":[NSDate date],key:dic}];        sysPasteboard.strings = [sysPasteboard.strings arrayByAddingObject:bizStr];    }}//以上的方法会覆盖剪贴板中其他类型的数据,比如图片类型,如要完全不覆盖,请使用剪贴板以下API- (nullable NSData *)dataForPasteboardType:(NSString *)pasteboardType;- (void)setData:(NSData *)data forPasteboardType:(NSString *)pasteboardType;

转载地址:http://xxnbo.baihongyu.com/

你可能感兴趣的文章
如何设定VDP同时备份的任务数?
查看>>
ipsec的***在企业网中的经典应用
查看>>
过来人谈《去360还是留在百度?》
查看>>
mysql备份工具innobackupex,xtrabackup-2.1安装,参数详解
查看>>
【复制】slave筛选复制之二(create/drop table语句)
查看>>
Movie Store OpenCart 自适应主题模板 ABC-0249
查看>>
mytop-MySQL监控工具
查看>>
RedHat linux YUM本地制作源
查看>>
apache端口占用问题
查看>>
本地Office Project计划表同步到SharePoint2013任务列表的权限问题
查看>>
Windows2008 R2 GAC权限问题
查看>>
洛谷——P1469 找筷子
查看>>
几句话就能让你明白:网络地址转换(NAT)
查看>>
springboot项目自定义注解实现的多数据源切换
查看>>
如何用javascript正则表达式验证身份证号码是否合法
查看>>
ccf 201803-1 跳一跳(Python实现)
查看>>
特此说明
查看>>
使用flume替代原有的scribe服务
查看>>
用脚本来定制ESXI安装镜像
查看>>
微软企业级加解密解决方案MBAM架构
查看>>