12

FooViewのサブクラスであるクラスがあり、UIViewそのビューはペン先からロードされます。次のようなものです。

+ (instancetype)viewFromNib
{
    NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"FooView" owner:self options:nil];
    return [xib objectAtIndex:0];
}

nib 自体にはFooView、Identity Inspector で Custom Class が設定されています。

これは次のようにインスタンス化されます。

FooView *view = [FooView viewFromNib];

これは、期待どおりに動作します。ただし、FooView 自体が FooSubclassView としてサブクラス化され、次のようにインスタンス化される場合:

FooSubclassView *view = [FooSubclassView viewFromNib];

viewまだタイプFooViewではありませんFooSubclassView

でクラスをスウィズリングしてobject_setClassも、基礎となるオブジェクトが のインスタンスであるという事実は修正されないためFooView、サブクラスのインスタンスで呼び出されるメソッドは、FooViewではなくスーパークラス ( )のメソッドになりますFooSubclassView

サブクラスごとに新しいペン先を作成したり、すべてのサブクラスで再実装したりすることなく、サブクラスが正しいタイプになるようにこれを修正するにはどうすればよいviewFromNibですか?

4

2 に答える 2