亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS中管理剪切板的UIPasteboard粘貼板類用法詳解

2020-07-26 03:19:31
字體:
來源:轉載
供稿:網友

一、自帶剪切板操作的原生UI控件
在iOS的UI系統中,有3個控件自帶剪切板操作,分別是UITextField、UITextView與UIWebView。在這些控件的文字交互處進行長按手勢可以在屏幕視圖上喚出系統的剪切板控件,用戶可以進行復制、粘貼,剪切等操作,其效果分別如下圖所示。

201661893404792.png (300×533)

UITextField的文字操作

201661893437177.png (300×533)

UITextView的文字操作

201661893503118.png (300×533)

二、系統的剪切板管理類UIPasteboard

實際上,當用戶通過上面的空間進行復制、剪切等操作時,被選中的內容會被存放到系統的剪切板中,并且這個剪切板并不只能存放字符串數據,其還可以進行圖片數據與網址URL數據的存放。這個剪切板就是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<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;對剪切板的某些操作會觸發如下通知://剪切板內容發生變化時發送的通知UIKIT_EXTERN NSString *const UIPasteboardChangedNotification;//剪切板數據類型鍵值增加時發送的通知UIKIT_EXTERN NSString *const UIPasteboardChangedTypesAddedKey;//剪切板數據類型鍵值移除時發送的通知UIKIT_EXTERN NSString *const UIPasteboardChangedTypesRemovedKey;//剪切板被刪除時發送的通知UIKIT_EXTERN NSString *const UIPasteboardRemovedNotification;

三、復制圖片的簡單例子
創建一個CopyView

#import "CopyView.h"@interface CopyView ()@property (strong, nonatomic) UIImageView* img1;@property (strong, nonatomic) UIImageView* img2;@end@implementation CopyView-(UIImageView *)img1{  if (_img1 == nil) {    _img1 = [[UIImageView alloc] initWithFrame:CGRectMake(10.0f, 20.0f, 100.0f, 100.0f)];    NSString* path = [[NSBundle mainBundle] pathForResource:@"NetworldImage" ofType:@"jpg"];    _img1.image = [UIImage imageWithContentsOfFile:path];  }  return _img1;}-(UIImageView *)img2{  if (_img2 == nil) {     _img2 = [[UIImageView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(self.img1.frame)+50.0f, 20.0f, 100.0f, 100.0f)];    _img2.backgroundColor = [UIColor lightGrayColor];  }  return _img2;}- (instancetype)initWithFrame:(CGRect)frame {  self = [super initWithFrame:frame];  if (self) {    self.backgroundColor = [UIColor whiteColor];    [self addSubview:self.img1];    [self addSubview:self.img2];  }  return self;}-(BOOL)canBecomeFirstResponder{  return YES;}-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{  NSArray* methodNameArr = @[@"copy:",@"cut:",@"select:",@"selectAll:",@"paste:"];  if ([methodNameArr containsObject:NSStringFromSelector(action)]) {    return YES;  }  return [super canPerformAction:action withSender:sender];}-(void)copy:(id)sender{  UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];  [pasteboard setImage:self.img1.image];}-(void)paste:(id)sender{  UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];  self.img2.image = [pasteboard image];}-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{  [self becomeFirstResponder];  UIMenuController* menuController = [UIMenuController sharedMenuController];  [menuController setTargetRect:self.img1.frame inView:self];  [menuController setMenuVisible:YES animated:YES];}@end在controller中#import "ViewController.h"#import "CopyView.h"@implementation ViewController- (void)viewDidLoad {  [super viewDidLoad];  CopyView* cv = [[CopyView alloc] initWithFrame:self.view.bounds];  self.view = cv;}@end

效果展示

201661893535077.png (592×986)

201661893556615.png (592×986)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品中文字幕在线| 欧美午夜久久久| 亚洲三级免费看| 亚洲国产小视频在线观看| 亚洲free性xxxx护士白浆| 亚洲成人网久久久| 亚洲一区二区中文字幕| 日韩精品福利在线| 国产不卡av在线免费观看| 中文字幕日韩高清| 日韩av在线免费观看一区| 日韩不卡中文字幕| 国产热re99久久6国产精品| 国产一区二区三区在线播放免费观看| 亚洲国产精品电影在线观看| 国产精品天天狠天天看| 欧美一级大片视频| 亚洲人成电影网站色www| 在线a欧美视频| 青青久久av北条麻妃海外网| 91视频免费在线| 国产成人精品一区二区三区| 岛国av一区二区三区| 久久久精品国产| 成人免费视频网| 久久久噜噜噜久久| 成人欧美一区二区三区在线湿哒哒| 一区二区三区视频在线| 欧美xxxx做受欧美| 国产精品久久久久久久久免费| 欧美裸体视频网站| 亚洲免费视频在线观看| 亚洲第一男人天堂| 538国产精品一区二区免费视频| 国产精品视频精品视频| 久久久免费在线观看| 久久精品亚洲热| 伊人一区二区三区久久精品| 国产99视频在线观看| 亚洲欧洲一区二区三区在线观看| 欧美成年人视频网站欧美| 欧美另类老女人| 亚洲精品网站在线播放gif| 亚洲在线www| 一区二区三区四区在线观看视频| 日韩成人在线视频| 亚洲国产精彩中文乱码av| 色香阁99久久精品久久久| 国产欧美日韩最新| 国产精品欧美风情| 26uuu国产精品视频| 国内精品中文字幕| 欧美一性一乱一交一视频| 亚洲free性xxxx护士hd| 国产suv精品一区二区三区88区| 亚洲国产精品系列| 色一区av在线| 亚洲欧美综合图区| 欧美亚洲第一页| 51精品国产黑色丝袜高跟鞋| 欧美高跟鞋交xxxxhd| 日韩av中文字幕在线播放| 日韩一二三在线视频播| 亚洲一区二区三区视频播放| 国产精品美乳在线观看| 午夜精品久久久久久99热软件| 91久久精品久久国产性色也91| 91av在线不卡| 亚洲男女自偷自拍图片另类| 亚洲专区中文字幕| 欧美成人精品在线观看| 97色在线观看免费视频| 欧美另类69精品久久久久9999| 国产亚洲一区精品| 亚洲午夜未满十八勿入免费观看全集| 韩国国内大量揄拍精品视频| 欧美黄色性视频| 亚洲人成网站999久久久综合| 国产日韩在线精品av| 国产精品96久久久久久又黄又硬| 久久成人亚洲精品| 18久久久久久| 国产精品午夜一区二区欲梦| 欧美大尺度电影在线观看| 国产成人一区二区| 成人激情综合网| 日韩av在线播放资源| 国产日韩精品在线观看| 国产精品女主播| 精品色蜜蜜精品视频在线观看| 日韩在线视频免费观看| 精品久久久久久久久中文字幕| 在线观看亚洲区| 九九精品在线播放| 欧美性色19p| 欧美激情一二区| 久久成人国产精品| 青青精品视频播放| 国产精品海角社区在线观看| 亚洲黄色在线看| 成人激情视频在线播放| 国产va免费精品高清在线观看| 亚洲欧美精品中文字幕在线| 日韩中文字幕免费看| 高清日韩电视剧大全免费播放在线观看| 亚洲国产天堂久久综合| 亚州成人av在线| 精品爽片免费看久久| 狠狠躁夜夜躁久久躁别揉| 日韩一区二区福利| 亚洲第一精品电影| 国色天香2019中文字幕在线观看| 精品露脸国产偷人在视频| 亚洲国产欧美在线成人app| 亚洲天堂成人在线| 国产精品wwww| www.日韩欧美| 国产91在线播放九色快色| 欧美一级免费看| 欧美性猛交xxxx乱大交| 91免费看片网站| 亚洲一区二区在线| 色噜噜国产精品视频一区二区| 精品国产91久久久| 社区色欧美激情 | 最近日韩中文字幕中文| 国产剧情久久久久久| 亚洲精品成人久久电影| 国产精品专区第二| 97碰碰碰免费色视频| 日韩高清有码在线| 热门国产精品亚洲第一区在线| 最近2019中文字幕在线高清| 亚洲激情电影中文字幕| 亚洲91av视频| 91精品国产高清久久久久久91| 午夜免费在线观看精品视频| 另类专区欧美制服同性| 国产精品久久久久久亚洲影视| 国产99久久精品一区二区永久免费| 精品日本美女福利在线观看| 国产精品高潮呻吟久久av无限| 国产精品精品一区二区三区午夜版| 成人97在线观看视频| www.亚洲免费视频| 午夜精品久久17c| 久久久噜噜噜久噜久久| 成人精品一区二区三区电影免费| 午夜欧美不卡精品aaaaa| 国产精品久久久久久网站| 亚洲精品电影在线| 亚洲а∨天堂久久精品9966| 一区二区三区高清国产| 国产精品96久久久久久又黄又硬| 亚洲国产精品美女| 亚洲人成毛片在线播放| 日韩电影第一页| 性欧美办公室18xxxxhd| 91精品国产一区| 国产精品自拍偷拍视频| 国产精品男人爽免费视频1| 欧美风情在线观看| 欧美激情亚洲综合一区| 91超碰caoporn97人人|