本文共 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。
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/