在iOS的UI系統中,有3個控件自帶剪切板操做,分別是UITextField、UITextView與UIWebView。在這些控件的文字交互處進行長按手勢能夠在屏幕視圖上喚出系統的剪切板控件,用戶能夠進行復制、粘貼,剪切等操做,其效果分別以下圖所示。數組
UITextField的文字操做atom
UITextView的文字操做spa
UIWebView的文字操做code
實際上,當用戶經過上面的空間進行復制、剪切等操做時,被選中的內容會被存放到系統的剪切板中,而且這個剪切板並不僅能存放字符串數據,其還能夠進行圖片數據與網址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。rem
UIPasteboard中經常使用方法及屬性以下:字符串
//剪切板的名稱 @property(readonly,nonatomic) NSString *name; //根據名稱刪除一個剪切板 + (void)removePasteboardWithName:(NSString *)pasteboardName; //是否進行持久化 @property(getter=isPersistent,nonatomic) BOOL persistent; //此剪切板的改變次數 系統級別的剪切板只有當設備從新啓動時 這個值纔會清零 @property(readonly,nonatomic) NSInteger changeCount;
下面這些方法用於設置與獲取剪切板中的數據:get
最新一組數據對象的存取:
//獲取剪切板中最新數據的類型 - (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;
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592