如何複製貼上到系統貼上板

2021-10-19 02:09:02 字數 2615 閱讀 3585

uipasteboard類有3個初始化方法,如下:

//獲取系統級別的剪下板+ (uipasteboard*)generalpasteboard;//獲取乙個自定義的剪下板 name引數為此剪下板的名稱 create引數用於設定當這個剪下板不存在時 是否進行建立+ (nullableuipasteboard*)pasteboardwithname:(nsstring*)pasteboardname create:(bool)create;//獲取乙個應用內可用的剪下板+ (uipasteboard*)pasteboardwithuniquename;

上面3個初始化方法,分別獲取或建立3個級別不同的剪下板,下面我們詳解一下在什麼情況下用哪種初始化方法

+ (uipasteboard *)generalpasteboard;系統級別的剪下板在整個裝置中共享,即是應用程式被刪掉,其向系統級的剪下板中寫入的資料依然在。

+ (uipasteboard *)pasteboardwithuniquename;第3個方法建立的剪下板等價為使用第2個方法建立的剪下板,只是其名稱字串為nil,它通常用於當前應用內部。(當然也可以跨應用使用,但必須bundle identifier 例com.maoshaoqian.** 星號前部一樣)

注意:使用第3個方法建立的剪下板預設是不進行資料持久化的,及當應用程式退出後,剪下板中內容將別抹去。若要實現持久化,需要設定persistent屬性為yes。

-(bool)canbecomefirstresponder-(bool)canperformaction:(sel)action withsender:(id)sender

這兩個方法,前者設定控制項能接收到事件(能成為第一響應者),後者決定這個控制項能夠使用複製、剪下、選中、全選、貼上等的哪一種或幾種功能,並過載對應的

-(void)copy:(id)sender

-(void)cut:(id)sender

-(void)select:(id)sender

-(void)selectall:(id)sender

-(void)paste:(id)sender

方法,在這幾個方法中處理事件,uimenucontroller負責顯示ui。

uipasteboard *pb = [uipasteboard generalpasteboard];

//以下兩句**中,第二句會將第一句**覆蓋,只保留第二句的type

[pb setvalue:@"1111type" forpasteboardtype:@"boardtype1"];

[pb setvalue:@"2222type" forpasteboardtype:@"boardtype2"];

//以下兩句**中,會新增所有type,不會覆蓋,若是新增相同的相同type的item則會更新這個type所對應的item

dict中的第乙個欄位為type

[pb additems:@[@,@]];

[pb additems:@[@,@]];

uipasteboard *pb1 = [uipasteboard pasteboardwithname:@"ceshi" create:yes];

[pb1 additems:@[@,@]];

[pb1 additems:@[@,@]];

注意,如果建立這種型別的pasteboard,繼續新增加相同type的item,不會更新之前的item,而是直接新增新的item,這樣可以使得乙個type對應多個item,[pb1 valuesforpasteboardtype:@"1111pb2" initemset:[nsindexset indexsetwithindex:0]];這也許就是這個方法的意義所在,利用indexset可以查詢出該type所對應的values陣列中指定index的value(value為data型別的資料);

每次呼叫這個方法都會建立乙個新的pasteboard,無法做到資料的共享(想要做到資料共享,可能還需要使用到單例之類的方法),個人不建議使用!

pasteboard取值

[pb1 valuesforpasteboardtype:@"1111pb2" initemset:[nsindexset indexsetwithindex:0]]使用這個方法

pasteboard刪除值

//刪除剪下板中的資料,也可以直接呼叫系統的方法remove  pasteboard

[[pb1 items] enumerateobjectsusingblock:^(nsdictionary* _nonnull obj, nsuinteger idx, bool * _nonnull stop) {

[obj.allkeys enumerateobjectsusingblock:^(nsstring * _nonnull key, nsuinteger idx, bool * _nonnull stop) {

nsdata *dictdata = [nskeyedarchiver archiveddatawithrootobject:@0]; //這裡clear的資料型別可以自己定義

[pb1 setdata:dictdata forpasteboardtype:key];

[pb1 setimage:image];

Vim 使用系統貼上板複製貼上

習慣了windows下面的複製,粘帖快捷鍵。轉到vim編輯器會發現這兩個鍵沒什麼作用,其實vim是使用ctrl shift c,ctrl shift v複製粘帖的。但是使用這些快捷鍵只能在一定螢幕範圍使用,且只能在插入模式才有效。而在vim中簡單用y只是複製到 雙引號 貼上板裡,同樣用p貼上的也是這...

系統貼上板到vim

習慣了windows下面的複製,粘帖快捷鍵。轉到vim編輯器會發現這兩個鍵沒什麼作用,其實vim是使用ctrl shift c,ctrl shift v複製粘帖的。但是使用這些快捷鍵只能在一定螢幕範圍使用,且只能在插入模式才有效。而在vim中簡單用y只是複製到 雙引號 貼上板裡,同樣用p貼上的也是這...

QT 複製 貼上系統剪貼簿

一 複製 可以複製文字 到系統剪貼簿,最好將qimage格式複製到剪貼簿,qpixmap要比qimage慢,因為qpixmap需要首先轉換為qimage格式。clipboard 1.clipboard setimage image 2.clipboard setpixmap pixmap 3.cli...