什麼是爲UIView子類的屬性設置默認值的正確方法?UIView子類的默認屬性
儘管我還沒有使用它們,但如果XIB提供了一個值,我希望它覆蓋默認值。但是如果XIB沒有提供值,我想要我的默認值。
在這種情況下,我特別考慮了CGFloat值。雖然它可以設置爲0.0,但這不是一個有用的默認值,因此在我的代碼中檢查0.0的值並將其替換爲更好的值是我寧願避免的。
什麼是爲UIView子類的屬性設置默認值的正確方法?UIView子類的默認屬性
儘管我還沒有使用它們,但如果XIB提供了一個值,我希望它覆蓋默認值。但是如果XIB沒有提供值,我想要我的默認值。
在這種情況下,我特別考慮了CGFloat值。雖然它可以設置爲0.0,但這不是一個有用的默認值,因此在我的代碼中檢查0.0的值並將其替換爲更好的值是我寧願避免的。
在你的子類中實現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;
}
不是Apple建議不要在init方法中使用訪問器? – lnafziger 2012-07-03 05:21:03
如果這是你自己的自定義屬性,則XIB應該將它設置歸零。
因此,@cduhn說,你可以修改它:
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super initWithCoder:decoder]) {
lineWidth = 12; // whatever value you want
}
return self;
}
什麼性質? UIView有很多。 – mahboudz 2009-09-24 02:07:57
哦,我的壞。子類的自定義屬性。在這種情況下,它被稱爲'lineWidth'。 – 2009-09-24 06:47:32