2012-07-04 73 views
0

這個問題是關於「風格」,因爲我認爲這是一個非常普遍的問題,我正在尋找一個優雅的解決方案。 我創建了一些「高級」UIView,我試圖讓它們非常可定製。我需要知道init方法中所有可定製參數的值,所以有時我需要一個非常長的初始化方法,如:正確的方式來創建一個可定製的uiview

initWithFrame:color:font:verticalspace: verylonglist:

我試着使用委託設計模式,但我還需要在init方法內傳遞委託。

我的實際最佳解決方案是將init方法留空並在「configure」方法內移動有關佈局的所有內容。每次我有機會像背景顏色或字體我會調用這種方法,我會重建視圖。

我認爲有一個最好的方法來解決這個問題... 我很想看看UITableView類的代碼,因爲有了這個類,你可以在init方法之外傳遞一個委託。

回答

2

查看類似UIButtonUILabel的內容。他們都有很多可配置的方面,但是要簡單地創建其中一個對象的實例,他們只需要很少的信息。

通常,提供初始方法,允許您的班級的消費者指定最少量的信息以供班級使用。

如果您確實想讓消費者用一堆值初始化類,請考慮使用某種initWithDictionary:方法,該方法需要參數NSDictionary。這可以使您的方法名稱縮短並允許用戶爲您的課程自定義任意數量的設置。

您也可以考慮爲消費者提供一種方法來請求具有一些標準值的實例。例如,UITableViewCell有一個initWithStyle:reuseIdentifier:方法。重要的部分是風格 - UITableViewCell提供了幾種默認風格,如UITableViewCellStyleDefaultUITableViewCellStyleSubtitle

0

我不知道這是否是標準/最佳實踐方式,但我在這種情況下使用字典並將其傳遞給initWithDictionary初始值設定項。也可以創建一個類方法,它返回一個可以自定義(和委託集)的'默認設置'類型的字典,這樣每當使用該類時不需要指定每個參數。

相關問題