iphone 拷貝 剪下 和貼上操作

2021-06-20 06:40:22 字數 4576 閱讀 7303

類中實現了拷貝-剪下-貼上支援。如果您希望在自己的應用程式中得到這個行為,可以使用這些類的物件,或者自行實現。

本文的下面部分將描述uikit中用於拷貝、剪下、和貼上操作的程式設計介面,並解釋其用法。

文件中的「支援拷貝和貼上」部分。

,用於為應用程式中的拷貝、剪下、和貼上操作提供方法和機制。具體如下:

類提供了貼上板的介面。貼上板是用於在乙個應用程式內或不同應用程式間進行資料共享的受保護區域。該類提供了讀寫剪貼簿上資料專案的方法。

類可以在選定的拷貝、剪下、和貼上物件的上下方顯示乙個編輯選單。編輯選單上的命令可以有拷貝、剪下、貼上、選定、和全部選定。

方法。響應者類可以實現這個方法,以根據當前的上下文顯示或移除編輯選單上的命令。

非正式協議宣告了處理拷貝、剪下、貼上、選定、和全部選定命令的介面。當使用者觸碰編輯選單上的某個命令時,相應的uiresponderstandardeditactions方法就會被呼叫。

貼上板是同一應用程式內或不同應用程式間交換資料的標準化機制。貼上板最常見的的用途是處理拷貝、剪貼、和貼上操作:

部分。無論是哪種操作,您通過貼上板執行的基本任務是讀寫貼上板資料。雖然這些任務在概念上很簡單,但是它們遮蔽了很多重要的細節。複雜的原因主要在於資料的表現方式可能有很多種,而這個複雜性又引入了效率的考慮。本文的下面部分將對這些以及其它的問題進行討論。

命名貼上板

貼上板可能是公共的,也可能是私有的。公共貼上板被稱為系統貼上板;私有貼上板則由應用程式自行建立,因此被稱為應用程式貼上板。貼上板必須有唯一的名字。uipasteboard定義了兩個系統貼上板,每個都有自己的名字和用途:

物件。值來取得代表檢索貼上板的物件。

來取得這個名稱。

貼上板的持久保留

屬性設定為yes可以使其持久保留。當持久貼上板的擁有者程式被使用者解除安裝時,其自身也會被移除。

貼上板的擁有者和資料項

最後將資料放到貼上板的物件被稱為該貼上板的擁有者。放到貼上板上的每一片資料都稱為乙個貼上板資料項。貼上板可以保有乙個或多個資料項。應用程式可以放入或取得期望數量的資料項。舉例來說,假定使用者在檢視中選擇的內容包含一些文字和乙個影象,貼上板允許您將文字和影象作為不同的資料項進行拷貝。從貼上板讀取多個資料項的應用程式可以選擇只讀取被支援的資料項(比如只是文字,而不支援影象)。

方法來新增專案,但是該寫入方法並不會將那些專案加入到貼上板當前內容之後。

資料的表示和uti

貼上板操作經常在不同的應用程式間執行。系統並不要求應用程式了解對方的資訊,包括對方可以處理的資料種類。為了最大化潛在的資料分享能力,貼上板可以保留同乙個資料項的多種表示。例如,乙個富文字編輯器可以提供被拷貝資料的html、pdf、和純文字表示。貼上板上的乙個資料項包括應用程式可為該資料提供的所有表示。

。作為例子,假定乙個應用程式支援富文字和影象的選擇,它可能希望將富文字和unicode版本的選定文字,以及選定影象的不同表示放到貼上板上。在這樣的場景下,每個資料項的每種表示都和它自己的資料一起儲存,如圖3-3所示。

圖3-3 

貼上板及其表示

一般情況下,為了最大化潛在的共享可能性,貼上板資料項應該包括盡可能多的表示。

貼上板的讀取程式必須找到最適合自身能力(如果有的話)的資料型別。通常情況下,這意味著選擇內涵最豐富的可用型別。舉例來說,乙個文字編輯器可能為被拷貝的資料提供html(富文字)和純文字表示,支援富文字的應用程式應該選擇html表示,而只支援純文字的應用程式則應該選擇純文字的表示。

變化記數

屬性)來確定貼上板的當前資料是否和最後一次取得的資料相同。每次變化記數遞增時,貼上板都會向對此感興趣的觀察者傳送通告。

。為了在定製檢視中實現拷貝-和-貼上行為,您必須自行管理該檢視中物件的選擇。如果使用者通過特定的觸控手勢(比如雙擊)來選擇檢視中的物件,您就必須處理該事件,即在程式內部記錄該選擇(同時取消之前的選擇),可能還要在檢視中指示新的選擇。如果使用者可以在檢視中選擇多個物件,然後進行拷貝-剪下-貼上操作,您就必須實現多選的行為。

部分進行討論。

當應用程式確定使用者請求了編輯選單時—可能就是乙個選擇的動作—您應該執行下面的步驟來顯示選單:

,即選單控制器例項。

方法。系統會根據選定內容與螢幕頂部和底部的距離,將編輯選單顯示在該矩形的上方或下方。

方法(兩個引數都傳入yes),在選定內容的上方或下方動畫顯示編輯選單。

訊息,確保自己在隨後的拷貝、剪下、和貼上操作中是第一響應者。

程式清單3-4 

顯示編輯選單

- (void)touchesended:(nsset *)touches withevent:(uievent *)event

}

表示)是否適合當前的上下文。舉例來說,如果該選擇器是paste:,而貼上板上沒有該檢視可以處理的資料,則響應者應該返回no,以便禁止貼上命令。如果第一響應者沒有實現canperformaction:withsender:方法,或者沒有處理給定的命令,該訊息就會進入響應者鏈。

程式清單3-5展示了canperformaction:withsender:方法的乙個實現。該實現首先尋找和copy:copy:、及paste:選擇器相匹配的訊息,並根據當前選擇的上下文啟用或禁用拷貝、剪下、和貼上選單命令。對於貼上命令,還考慮了貼上板的內容。

程式清單3-5 

有條件地啟用選單命令

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

請注意,這個方法的最後乙個else子句呼叫了超類的實現,使超類有機會處理子類忽略的命令。

方法,使第一響應者的canperformaction:withsender:再次被呼叫。

宣告了這些方法。

類,且應該被安裝到響應者鏈中。

copy:cut:訊息的響應**中,您需要把和選定內容相對應的物件或資料以盡可能多的表示形式寫入到貼上板上。這個操作涉及到如下這些步驟(假定只有乙個的貼上板資料項):

標識或取得和選定內容相對應的物件或二進位制資料。

)。可能的話,請為物件或資料生成一或多個其它的表示。

函式將影象轉換為不同的表示。

取得貼上板物件。

來取得該物件。

為寫入到貼上板資料項的每個資料表示分配乙個合適的uti。

部分。將每種表示型別的資料寫入到第乙個貼上板資料項中:

訊息可以寫入資料物件。

訊息可以寫入屬性列表物件。

中移除選定內容所代表的物件,並更新檢視。

程式清單3-6展示了

進行歸檔,目的是得到乙個nsdata物件,以便作為引數傳遞給貼上板的setdata:forpasteboardtype:方法。

程式清單3-6 

拷貝和剪下操作

- (void)copy:(id)sender

}

- (void)cut:(id)sender

}

中宣告。

paste:中,並將新物件顯示在使用者指定的檢視位置上。這個操作涉及到如下這些步驟(假定只有單一的貼上板資料項):

取得貼上板物件。

來取得該物件。

方法並考察其返回的型別陣列來實現。

方法的實現中應該已經執行過這個步驟。

如果貼上板的第乙個資料項包含應用程式可以處理的資料,則可以呼叫下面的方法來讀取:

,就可以使用這個方法。

部分)。

將物件加入到應用程式的資料模型中。

將物件的表示顯示在使用者介面中使用者指定的位置上。

程式清單3-7是paste:方法的乙個實現例項,該方法執行與cut:copy:方法相反的操作。示例中的檢視首先確認貼上板是否包含自身支援的定製表示資料,如果是的話,就讀取該資料並將它加入到應用程式的資料模型中,然後將檢視的一部分—當前選定區域—標識為需要重畫。

程式清單3-7 

將貼上板的資料貼上到選定位置上

- (void)paste:(id)sender

}

}

在您實現的cut:copy:、或paste:命令返回後,編輯選單會被自動隱藏。通過下面的**使它保持可見:

[uimenucontroller setmenucontroller].menuvisible = yes;

系統可能在任何時候隱藏編輯選單,比如當顯示警告資訊或使用者觸碰螢幕其它區域時,編輯選單就會被隱藏。如果您有某些狀態或螢幕顯示需要依賴於編輯選單是否顯示的話,就應該偵聽uimenucontrollerwillhidemenunotification通告,並執行恰當的動作。

vim 複製 剪下 貼上 撤銷操作

背景知識 vim 有 12 個貼上板,分別是 0 1 2 9 a 用 reg 命令可以檢視各個貼上板裡的內容。在 vim 中簡單用 y 命令只是複製到 雙引號 貼上板裡,同樣用 p 命令貼上的也是這個貼上板裡的內容 要將 vim 的內容複製到某個貼上板,需要先退出編輯模式,再進入命令模式後,選擇要複...

作業系統檔案的拷貝和貼上

今天下午進行了一下作業系統檔案的測試 測試很小,但是我們平時用的最多的,希望大家拷貝東西的時候不要出錯。測試準備 d folder 1 document 1.txt 11.doc,3.txt cd1.txt 1111111 11.doc 我被替換了 e folder 2 document 1.txt...

瀏覽器複製 剪下 貼上事件簡單操作示例

更多參考 點這裡 每個事件都有乙個 before 事件對應 beforecopy beforecut beforepaste 這幾個 before 一般不怎麼用,所以我們把注意力放在三個事件就可以了。copy事件使用示例 我們可以看到事件物件中的屬性 我們主要研究的是裡面的clipboarddata...