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