2009-09-23 57 views
2

什麼是爲UIView子類的屬性設置默認值的正確方法?UIView子類的默認屬性

儘管我還沒有使用它們,但如果XIB提供了一個值,我希望它覆蓋默認值。但是如果XIB沒有提供值,我想要我的默認值。

在這種情況下,我特別考慮了CGFloat值。雖然它可以設置爲0.0,但這不是一個有用的默認值,因此在我的代碼中檢查0.0的值並將其替換爲更好的值是我寧願避免的。

+0

什麼性質? UIView有很多。 – mahboudz 2009-09-24 02:07:57

+0

哦,我的壞。子類的自定義屬性。在這種情況下,它被稱爲'lineWidth'。 – 2009-09-24 06:47:32

回答

6

在你的子類中實現initWithFrame:並在那裏設置屬性。

- (id)initWithFrame:(CGRect)aRect { 
    if (self = [super initWithFrame:aRect]) { 
     // Set whatever properties you want. For example... 
     self.alpha = 0.75; 
    } 
    return self; 
} 

這個指定的初始值設定項只有在視圖在代碼中構造時纔會執行。如果視圖來自一個nib文件,它將使用initWithCoder:來初始化,這會修改這些屬性以匹配nib文件中的屬性。爲了處理這種情況下你可以覆蓋的initWithCoder :,測試,看看該屬性設置爲默認值,如果是這樣,改變它:

- (id)initWithCoder:(NSCoder *)decoder { 
    if (self = [super initWithCoder:decoder]) { 
     if (self.alpha == 1.0) { 
      self.alpha = 0.20; 
     } 
    } 
    return self; 
} 
+1

不是Apple建議不要在init方法中使用訪問器? – lnafziger 2012-07-03 05:21:03

1

如果這是你自己的自定義屬性,則XIB應該將它設置歸零。

因此,@cduhn說,你可以修改它:

- (id)initWithCoder:(NSCoder *)decoder { 
    if (self = [super initWithCoder:decoder]) { 
     lineWidth = 12; // whatever value you want 
    } 
    return self; 
}