2012-06-06 28 views
0

我一直在尋找最佳實踐和創造自定義,可重用視圖組件的東西。到目前爲止,它看起來像一個自定義的UIView子類是要走的路。用自定義init分類UIView - 這是理智的嗎?

在這種情況下,我需要的是可以方便地前往標籤的固定大小的視圖,以及便利的初始化將是巨大的。我可以標記的標籤和使用恆定的,但它給這個(樣板像UIKit的進口刪除)似乎沒有必要(與ARC):

// .h file 
@interface MyView : UIView 
@property (nonatomic, weak) IBOutlet UILabel *label; 
+ (id)withText:(NSString *)text; 
@end 

// .m file 
@implementation MyView 
+ (id)withText:(NSString *)text { 
    MyView *view = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) 
                owner:nil 
               options:nil] objectAtIndex:0]; 
    view.label.text = text; 
    return view; 
} 
@end 

(編輯:改爲類方法我的擔憂仍然不變,但它總體上不太可疑)

我的MyView.xib文件唯一的頂層元素(一個UIView)有一個自定義類設置爲MyView,並且出口連接到FileOwner。

而且這個工作。完美。它能夠在我使用它的任何地方正確呈現,沒有例外,沒有裁剪,也沒有任何有趣的業務,我可以看到。

到目前爲止。我有點擔心:

  1. 我還沒有在任何地方看過這種技術。當然,我只是在尋找一個相對較短的時間(幾個小時,被動地)。
  2. 我沒有做任何initWithFrame的推薦壓倒一切的:/編碼器:等
  3. 我只是在一個非常有限的領域使用這一權利,現在,所以它是無處附近的情況以及測試喜歡外出的角度來看,繪圖性能是未知的,我還沒有徹底的內存泄漏檢測等
  4. 我幾乎可以肯定,我失去了一些東西。我很可能會在使用它的時候很快找到它,但我可能找不到它們。

有人有更多的UIView經驗比我有腦海中的一點點?這是一個好主意嗎?一個可怕的「omg wtf你在想什麼」主意?有驚喜等着我嗎?有什麼我應該閱讀如何創建這樣的簡單的自定義視圖?

+1

在第一行的「自我」的三種用途,其實,可怕的,特別是因爲你* *的改變自我,不釋放舊的。更不用說使用「文件所有者」的筆尖中的任何內容都是令人驚訝的。作爲類方法可能更有意義。 –

+0

哈,這是一個很好的觀點 - 特別是業主:案例。實際上,我想我現在會改變它。 – Groxx

+0

更改 - 謝謝:)這是一個漫長的一天,我可能不會完全直接思考。 – Groxx

回答

1

你應該閱讀Apple docs on initializers,還有還有Mike Ash’s posts about them。初始化器並不難,但是有一些微妙的問題可能會讓你受到影響,正如你可以在當前代碼中找到的那樣,正如評論中已經提到的那樣。

+0

我還沒有看到這些,謝謝 - 我會這樣做:) – Groxx

0

一般情況下,這種技術應該罰款。由於您將類方法稱爲「便捷初始值設定項」,因此self引用了類對象,並且不會更改,因此可以在此處引用它。這不像在初始化器中自我攪拌,這是棘手的,但可以正確完成。

在上述情況下,只有initWithCoder:初始化將被調用,爲你裝載從筆尖的看法。