2013-05-22 188 views
1

我試圖給我所有的意見一個新的屬性,稱爲newProperty。 由於所有的視圖都會有它,所以將它添加到超類中會更有意義。 在這種情況下,我想添加newPropertyUIView,以便所有的UIView子類(UIWindow,UIPickerView,UITabBar等)都將繼承它。 那可能嗎?將屬性添加到超類UIView

回答

1

在UIView上寫一個類別。

在Xcode中,進入文件 - >新建 - >文件,然後從iOS部分的Cocoa Touch行中選擇「Objective-C Category」。確保類別在UIView上,給它一個名字,你就不在了。

從這裏開始,您可以添加屬性或實例方法,假設您在應用程序的前綴文件中導入類別,則所有從UIView繼承的類都可以訪問。

編輯:我沒有使用關聯的對象。這是一個非常簡單的示例,它使用已存在於對象中的預定義屬性,使用我自己的屬性來簡化其檢索。

OP沒有說明他們希望添加到UIView中的屬性是什麼,這就是爲什麼我假設一個類別就足夠了。我確定你對下面的評論全部正確:re:數據存儲在一個真正自定義的屬性上。

我不欣賞downvotes,實際上OP的目標還沒有做得非常清楚,關於他們的「newProperty」的使用。

eg:UIView上的類別叫做Position。 (UIView + Position)

UIView+Position.h 

@interface UIView (Position) 

-(CGFloat)left; 
-(CGFloat)right; 
-(CGFloat)top; 
-(CGFloat)bottom; 

@property (nonatomic) CGFloat left; 
@property (nonatomic) CGFloat right; 
@property (nonatomic) CGFloat top; 
@property (nonatomic) CGFloat bottom; 

@end 



UIView+Position.m 

#import "UIView+Position.h" 

@implementation UIView (Position) 

-(CGFloat)left 
{ 
    return self.frame.origin.x; 
} 

-(CGFloat)right 
{ 
    return self.frame.origin.x + self.frame.size.width; 
} 

-(CGFloat)top 
{ 
    return self.frame.origin.y; 
} 

-(CGFloat)bottom 
{ 
    return self.frame.origin.y + self.frame.size.height; 
} 

@end 
+1

類別可以向類添加方法,但不能添加屬性。這是因爲類別不能爲getter和setter添加後備存儲/ ivar來操作。 –

+1

你不能添加'iVars'。請參閱:http://stackoverflow.com/q/6162589/667586 http://stackoverflow.com/a/6162619/667586 –

+1

這將允許您聲明和定義實例方法(包括屬性聲明),但它確實不允許存儲(例如,在實現類別時綜合屬性是錯誤的)。 – justin