我有一个类 ,FooView
它是 的子类UIView
,它的视图是从 nib 加载的,例如:
+ (instancetype)viewFromNib
{
NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"FooView" owner:self options:nil];
return [xib objectAtIndex:0];
}
笔尖本身FooView
在 Identity Inspector 中将其自定义类设置为。
这被实例化为:
FooView *view = [FooView viewFromNib];
这表现如你所料。但是,当 FooView 本身被子类化为 FooSubclassView,并实例化为:
FooSubclassView *view = [FooSubclassView viewFromNib];
view
仍然是类型FooView
,不是FooSubclassView
。
Swizzling 类object_setClass
并不能解决底层对象是 的实例这一事实,FooView
因此在子类实例上调用的方法将是超类 ( FooView
) 的方法,而不是FooSubclassView
.
我该如何纠正这个问题,以便子类具有正确的类型,而不必为每个子类创建一个新的 nib,或者不必viewFromNib
在每个子类中重新实现?