iOS开辟 UIPasteboard粘贴板全解

计算机软件开发 2024-10-6 02:43:07 5 0 来自 中国
UIPasteboard 是 Swift 中用于存储和检索应用步调中剪贴板中的数据的一个类。剪贴板是应用步调之间共享数据的一种机制,UIPasteboard 提供了一种简朴的方式来存储和检索应用步调中的剪贴板数据。
下面是 UIPasteboard 的一些特点和用法:

  • UIPasteboard 是一个公共种别,因此可以从全部应用步调中访问。
  • UIPasteboard 包含两个方法:setString:和 stringForType:,用于将字符串添加到剪贴板中或从剪贴板中检索字符串。
  • UIPasteboard 还包含一些范例和方法,如 URL 范例、data 范例、image 范例和 text 范例,用于存储和检索差异范例的数据。
  • 可以利用 UIPasteboard 将数据添加到剪贴板中,比方将一个 URL 添加到剪贴板中,以便在其他应用步调中打开该 URL。
  • 可以利用 UIPasteboard 检索剪贴板中的数据,比方检索剪贴板中的 URL,或检索剪贴板中的文本。
  • UIPasteboard 还提供了一些方法,用于查抄剪贴板中是否有特定范例的数据,比方查抄剪贴板中是否有文本或 URL。
    下面是一个简朴的示例,演示怎样利用 UIPasteboard 存储和检索剪贴板中的数据:
let string = "Hello, World!"  let pasteboard = UIPasteboard.generalpasteboard.setString(string, forType: .text)  print("剪贴板中的内容是:\(string)")if let string = pasteboard.string {      print("剪贴板中的内容是:\(string)")  }在iOS中,UITextField、UITextView和UIWebView等都有复制粘贴等功能。而其她控件却没有集成这些方便操纵的功能。下面我将通过对粘贴板UIPasteboard这个类来详细分析在iOS中粘贴板的利用方法。
1、剪切板管理类UIPasteboard详解

UIPasteboard类有3个初始化方法,如下:
//获取体系级别的剪切板+ (UIPasteboard *)generalPasteboard;//获取一个自界说的剪切板 name参数为此剪切板的名称 create参数用于设置当这个剪切板不存在时 是否举行创建+ (nullable UIPasteboard *)pasteboardWithNameNSString *)pasteboardName createBOOL)create;//获取一个应用内可用的剪切板+ (UIPasteboard *)pasteboardWithUniqueName;上面3个初始化方法,分别获取或创建3个级别差异的剪切板,下面我们详解一下在什么情况下用哪种初始化方法
+ (UIPasteboard *)generalPasteboard;体系级别的剪切板在整个装备中共享,便是应用步调被删掉,其向体系级的剪切板中写入的数据依然在。
+ (nullable UIPasteboard *)pasteboardWithNameNSString *)pasteboardName createBOOL)create;自界说的剪切板通过一个特定的名称字符串举行创建,它在应用步调内大概同一开辟者开辟的其他应用步调中可以举行数据共享。举个例子:好比你开辟了多款应用,用户全部下载了,在A应用中用户拷贝了一些数据(为了数据安全,不消体系级别的Pasteboard),在打开B应用时就会主动识别,进步用户体验。
+ (UIPasteboard *)pasteboardWithUniqueName;第3个方法创建的剪切板等价为利用第2个方法创建的剪切板,只是其名称字符串为nil,它通常用于当前应用内部。(固然也可以跨应用利用,但必须Bundle Identifier 例com.maoshaoqian.** 星号前部一样)
留意:利用第3个方法创建的剪切板默认是不举行数据恒久化的,及当应用步调退出后,剪切板中内容将别抹去。若要实现恒久化,必要设置persistent属性为YES。
下面我们来看一下UIPasteboard的常用属性
//剪切板的名称@property(readonly,nonatomic) NSString *name;//根据名称删除一个剪切板+ (void)removePasteboardWithNameNSString *)pasteboardName;//是否举行恒久化@property(getter=isPersistent,nonatomic) BOOL persistent;//此剪切板的改变次数 体系级别的剪切板只有当装备重新启动时 这个值才会清零@property(readonly,nonatomic) NSInteger changeCount;UIPasteboard数据范例判断及其存取
//获取剪切板中最新数据的范例- (NSArray<NSString *> *)pasteboardTypes;//获取剪切板中最新数据对象是否包含某一范例的数据- (BOOL)containsPasteboardTypesNSArray<NSString *> *)pasteboardTypes;//将剪切板中最新数据对象某一范例的数据取出- (nullable NSData *)dataForPasteboardTypeNSString *)pasteboardType;//将剪切板中最新数据对象某一范例的值取出- (nullable id)valueForPasteboardTypeNSString *)pasteboardType;//为剪切板中最新数据对应的某一数据范例设置值- (void)setValueid)value forPasteboardTypeNSString *)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<NSString *, id> *> *)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;//部门代码参考- (BOOL)canBecomeFirstResponder {        return YES;}- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {        //action 会返回很多,想用哪个就写谁人(action == @selector(cut )    return (action == @selector(copy || action == @selector(paste );}-(void)copy:(id)sender{        UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];    [pasteboard setImage:self.image];    if ([self.delegate respondsToSelectorselector(transSomeTing]) {        [self.delegate transSomeTing:pasteboard.image];        NSLog(@"%@",self.image);    }    NSLog(@"您点击的是拷贝%@",pasteboard.items);}-(void)paste:(id)sender{        UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];    UIImage *image = [pasteboard image];    if (image) {        self.image = image;    }    NSLog(@"您点击的是粘贴");}- (void)cut:(id)sender {        UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];    [pasteboard setImage:self.image];    NSLog(@"您点击的是剪切");}- (void)select:(id)sender {        NSLog(@"您点击的是选择");}-(void)selectAll:(id)sender {        NSLog(@"您点击的是全选");}对剪切板的某些操纵会触发如下关照:
//剪切板内容发生厘革时发送的关照UIKIT_EXTERN NSString *const UIPasteboardChangedNotification;//剪切板数据范例键值增长时发送的关照UIKIT_EXTERN NSString *const UIPasteboardChangedTypesAddedKey;//剪切板数据范例键值移除时发送的关照UIKIT_EXTERN NSString *const UIPasteboardChangedTypesRemovedKey;//剪切板被删除时发送的关照UIKIT_EXTERN NSString *const UIPasteboardRemovedNotification;//利用举例//当剪切板被删除时,监听关照,可处理处罚相应事故;[[NSNotificationCenter defaultCenter] addObserver:self selectorselector(menuControllerWillHide) name:UIPasteboardRemovedNotification object:nil];2、剪切板管理类UIPasteboard具体利用

我们以体系粘贴板+ (UIPasteboard *)generalPasteboard;来举例子
我们给UIImageView添加复制粘贴事故
////  ViewController.m//  Practice_UIPasteboard////#import "ViewController.h"#import "asteboardLabel.h"#import "asteboardImageView.h"#import <MobileCoreServices/MobileCoreServices.h>@interface ViewController ()<transSometing>@property (strong, nonatomic) IBOutlet PasteboardImageView *leftImageView;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        self.leftLabel.userInteractionEnabled = YES;//用于监听 UIMenuController的厘革    [[NSNotificationCenter defaultCenter] addObserver:self selectorselector(menuControllerWillShow) name:UIMenuControllerWillShowMenuNotification object:nil];    [[NSNotificationCenter defaultCenter] addObserver:self selectorselector(menuControllerWillHide) name:UIMenuControllerWillHideMenuNotification object:nil];    // Do any additional setup after loading the view, typically from a nib.}- (IBAction)longPressGestureAction:(UILongPressGestureRecognizer *)sender {    //要将图片变为第一相应者,而且要把图片设为**可互换状态**        [self.leftImageView becomeFirstResponder];        self.leftImageView.userInteractionEnabled = YES;        self.leftImageView.delegate = self;        UIMenuController *menuController = [UIMenuController sharedMenuController];        [menuController setTargetRect:self.leftImageView.frame inView:self.view];        [menuController setMenuVisible:YES animated:YES];    }}//  PasteboardImageView.m//  Practice_UIPasteboard////#import "asteboardImageView.h"@implementation PasteboardImageView//这个方法不能少- (BOOL)canBecomeFirstResponder {        return YES;}- (BOOL)canPerformAction:(SEL)action withSender:(id)sender {            return (action == @selector(copy || action == @selector(paste );}-(void)copy:(id)sender{        UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];    [pasteboard setImage:self.image];    if ([self.delegate respondsToSelectorselector(transSomeTing]) {        [self.delegate transSomeTing:pasteboard.image];        NSLog(@"%@",self.image);    }    NSLog(@"您点击的是拷贝%@",pasteboard.items);}-(void)paste:(id)sender{        UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];    UIImage *image = [pasteboard image];    if (image) {        self.image = image;    }    NSLog(@"您点击的是粘贴");}/*// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (void)drawRect:(CGRect)rect {    // Drawing code}*/@end
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:54, Processed in 0.156823 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表