2012-10-12 98 views
0

我已經設計了一個很好的自定義控件CustomUIView作爲UIview的子類,帶有一個不錯的初始化函數,它需要8個參數。我將它作爲指定的初始化程序來確保,任何用戶都將正確提供所有8個參數。 幾天後,我想在不同的使用筆尖的項目中重新使用該控件。 我添加了一個基本的UIView到其中一個NIB的畫布中,並將Custom類選項更改爲我的CustomUIView類。但我立即意識到我的初始化器沒有用,因爲它根本沒有被調用。自定義可可觸摸控制和初始化

你會對此建議做什麼?我想確保

  1. 所有的參數都採取了,但在同一時間
  2. 我想在IB的自定義控制的基本定位。
+0

8參數!?你確定沒有任何辦法可以將它壓平並使它們成爲所有物業? – CodaFi

+0

我發誓,沒有。所有8個都很重要。沒有回答任何問題,就不可能構建這種控制。 我無法避免這種情況,我需要強制該類的任何用戶提供配置。 –

+0

那麼,爲什麼不將新項目中的類從NIBs解碼爲代碼呢? – CodaFi

回答

1

爲什麼不建立在用於NIB的標準UIViewController初始化程序之上呢?

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle parameter1:(id)param1... 
    NSAssert(param1 != nil && param2 != nil ...); 
    if (self = [super initWithNibName:nibName bundle:nibBundle]) { 
     //Custom initializations here. 
    } 
    return self; 
} 
+0

如何強制在初始化時提供所有配置參數?有內部默認參數是沒有意義的,我想強制任何開發人員將重新使用該控件,將看到有什麼配置。 該控件根本沒有公共屬性。 –

+0

你在說什麼?通過使這是唯一可以工作的初始化程序,實際上,可以將其作爲默認初始化程序(除此之外,它應該在任何框架頭文件中明確標記默認初始化程序是什麼)。如果你不想要公共財產,這是你的機會。在類擴展中聲明一些私有屬性,並將它們的值設置爲給定的參數。如果您確實想要將其作爲默認值強制執行,請從其他初始值設定項返回nil。 – CodaFi

+0

什麼是不可理解的事實,我想迫使開發者提供一切!在自定義控件初始化期間的配置數據,我希望確保除非他提供它,沒有自定義控件,並且開發人員不必研究該控件的所有可能屬性,而是要給他舒適的體驗,因此自定義的初始化程序? 而另一個要求是這個自定義控件作爲IB中的UIView添加到任何其他項目中,自定義類選項更改爲Identity inspector中的UICustomClass? –