我在整理关于类继承的想法时遇到了麻烦。我应该在应用程序中创建一个类似界面的仪表板,并且在该仪表板视图上我可能会有 10 个小部件/仪表板。所有这些 dashlets/widgets 的外观基本相同,顶部有标题、边框、顶部按钮行和图表。假设我创建了一个名为“Dashlet”的 UI 视图子类,其中包含属性和插座,并创建了具有正确布局和连接插座等的 XIB 文件。
现在我想创建该“Dashlet”视图的几个子类,它们只会以不同的方式处理数据,并绘制不同的图形。我当前的代码如下所示:
Dashlet.h
@interface Dashlet : UIView{
@private
UILabel *title;
UIView *controls;
UIView *graph;
}
@property (weak, nonatomic) IBOutlet UILabel *title;
@property (weak, nonatomic) IBOutlet UIView *controls;
@property (weak, nonatomic) IBOutlet UIView *graph;
-(Dashlet*)initWithParams:(NSMutableDictionary *)params;
-(void)someDummyMethod;
@end
在 Dashlet.m 中
- (id) init {
self = [super init];
//Basic empty init...
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
-(id)initWithParams:(NSMutableDictionary *)params
{
self = [super init];
if (self) {
self = [[[NSBundle mainBundle] loadNibNamed:@"Dashlet" owner:nil options:nil] lastObject];
//some init code
}
return self;
}
现在假设我创建了一个名为 CustomDashlet.h 的子类:
@interface CustomDashlet : Dashlet
@property (nonatomic, strong) NSString* test;
-(void)testMethod;
-(void)someDummyMethod;
@end
和 CustomDashlet.m
-(id)init{
return self;
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
-(id)initWithParams:(NSMutableDictionary *)parameters
{
self = [super initWithParams:parameters];
if (self) {
//do some stuff
}
return self;
}
这有点工作,但我需要覆盖超类中声明的一些方法,甚至添加一些我自己的方法。每当我尝试在 CustomDashlet.m 中做这样的事情时
[self someDummyMethod]
甚至[self testMethod]
我收到这样的异常错误:
NSInvalidArgumentException', reason: '-[Dashlet testMethod]: unrecognized selector sent to instance
我这样做对吗?我错过了什么?我应该以其他方式完成这项工作吗?如果有人有建议,请随时分享您的想法,感谢您的所有帮助。