en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

4.16.2012

使用 initWithCoder 初始化 Storyboard 上的元件

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 元件初始化。






沒有留言:

張貼留言