0
我有一個自定義的類C繼承UIView其中我定義了一些常用的方法。繼承和擴展框架類的問題
現在我想要一個UITextView對象A和一個UIView對象B來擁有這些方法。對於B,我只需要將他的父親改爲C.
但是我應該怎樣做A?我不能直接將它的父親改爲C,否則我會失去UITextView的方法。
另外我不能(也不想)使用類,因爲在C中我有一些屬性和成員變量。
我有一個自定義的類C繼承UIView其中我定義了一些常用的方法。繼承和擴展框架類的問題
現在我想要一個UITextView對象A和一個UIView對象B來擁有這些方法。對於B,我只需要將他的父親改爲C.
但是我應該怎樣做A?我不能直接將它的父親改爲C,否則我會失去UITextView的方法。
另外我不能(也不想)使用類,因爲在C中我有一些屬性和成員變量。
多重繼承不是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子類。此外,您還可以在類別方法中訪問這些動態創建的屬性,從而可以利用您現在聲明的那些「成員變量」。
類別和單一繼承是工具。我們需要看具體情況,看看你可能會如何實現你的目標。但是沒有其他的繼承方式,就像你希望的那樣。 – danh