2013-11-21 32 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子类。此外,您还可以在类别方法中访问这些动态创建的属性,从而可以利用您现在声明的那些“成员变量”。