2013-11-21 38 views
0

我有一個自定義的類C繼承UIView其中我定義了一些常用的方法。繼承和擴展框架類的問題

現在我想要一個UITextView對象A和一個UIView對象B來擁有這些方法。對於B,我只需要將他的父親改爲C.

但是我應該怎樣做A?我不能直接將它的父親改爲C,否則我會失去UITextView的方法。

另外我不能(也不想)使用類,因爲在C中我有一些屬性和成員變量。

+0

類別和單一繼承是工具。我們需要看具體情況,看看你可能會如何實現你的目標。但是沒有其他的繼承方式,就像你希望的那樣。 – danh

回答

1

多重繼承不是Objective-C中的一項功能。充其量,你可以讓你的UITextView子類和你的UIView子類實現一個通用協議。當然,這意味着你將不得不重複代碼。

我相信你可以達到你想要的效果類別。您可以在運行時借力objc/runtime.h(從NSHipster借用)

#import "UIView+MyView.h" 
#import <objc/runtime.h> 

static const void *IndieBandNameKey = &IndieBandNameKey;  

@implementation UIView (MyView) 
@dynamic indieBandName; 

- (NSString *)indieBandName { 
    return objc_getAssociatedObject(self, IndieBandNameKey); 
} 

- (void)setIndieBandName:(NSString *)indieBandName { 
    objc_setAssociatedObject(self, IndieBandNameKey, indieBandName, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
} 

@end 

添加屬性,因爲UITextView的是UIView的子類,你把一個UIView類的方法將適用於你的UIView子類,以及你的UITextView子類。此外,您還可以在類別方法中訪問這些動態創建的屬性,從而可以利用您現在聲明的那些「成員變量」。