initWithCoder 是物件既有的一個初始化方法函式,正常來說,你不會在使用程式碼動態產生物件時去呼叫它產生新的物件,而是在使用 Storyboard 設計介面時,直接將 Storyboard 上的元件與類別中的 initWithCoder 方法做連結,使用類似靜態的方式,讓應用程式在一開始執行時就將介面上的元件直接定義成該類別,下面就來看看 initWithCoder 初始化方法函式的用法。
物件初始化
初始化的方法有很多,除了物件原本就有的 Init 方法函式,也可以透過使用者自己定義 InitWithParameter(參數)的方法函式,關於這類的方法函式可以參考 Class 類別初始化的寫法(建構式)一文。下面則是針對 initWithCoder 物件初始化的寫法(initWithCoder 方法函式的名稱使用者無法自行定義)。
- (MLDragingView *)initWithCoder:(NSCoder *)c {
self = [super initWithCoder:c];
if (self) {
//這裡撰寫對於該物件所要初始化的動作
}
return self;
}
上述的程式碼部分,就如同一般的物件初始化一樣,會回傳一個以該物件類別為型態的新物件,由於所回傳的物件最後是要與 Storyboard 上的元件做連結,所以此物件的類別必須要繼承於 Storyboard 元件庫中的其中一個元件才行,上述的物件是繼承於 UIImageView 的類別。
@interface MLDragingView : UIImageView
連結 Storyboard 上的元件
有了能與元件庫中元件對應的物件類別之後,就可以修改 Storyboard 對應元件中的 Identity Inspector 項目裡的 Class 屬性,將原本的 UIImageView 替換成 MLDragingView 類別。
首先我們從 Storyboard 元件庫中拖拉一個 UIImageView 元件到畫面上,接著在元件檢視器中的 Identity Inspector 裡找到 Class 項目,就可以在項目裡看到我們剛剛所製作的物件名稱,如下圖。
將 UIImageView 類別替換成 MLDragingView 類別 |
在完成 Class 的替換之後,每當應用程式執行時就會呼叫 MLDragingView Class 的 initWithCoder 初始化方法函式,來替介面上的 UIImageView 元件初始化。
沒有留言:
張貼留言