如何让我的Nib正确加载我自定义的UIScrollView子类?

时间:2009-05-07 16:31:19

标签: iphone cocoa-touch uikit interface-builder nib

我的笔尖里面有一个漂亮的UIScrollView,效果很好。然后我有一些非常特殊的需求和子类UIScrollView。在我的Nib中,我将身份检查器中的类更改为我的子类。

但由于某种原因,当nib加载器从nib构建所有这些对象时,我的-initWithFrame:方法永远不会被调用。实际上我现在在子类中没有改变任何东西。滚动视图工作正常。期待它似乎是一个空白的UIScrollView,即使我告诉笔尖它应该是一个SpecializedUIScrollView用于测试目的。

在继续使用Nib文件进行透视时,在继承UIScrollView时是否还需要考虑其他事项?

我的专用初始化程序如下所示:

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        NSLog(@"Hello !!!!!!!!!!!!!");
    }
    return self;
}

如果我尝试从Nib加载,我在控制台中永远不会看到Hello。当然,如果我自己分配并初始化它,它就可以工作。但我不想以编程方式定位我的滚动视图,如果我可以使用那个该死的很酷的Interface Builder。

2 个答案:

答案 0 :(得分:3)

nib或xib中的对象存储为序列化对象,这可能意味着您必须使用awakeFromNib方法,因为从不调用init方法。

答案 1 :(得分:1)

扩展 initWithCoder ,请务必调用super方法。在此超级通话期间,您的班级将调用 setFrame

然后,您可以在 initWithFrame 中重复使用标准 initWithCoder ,并且界面构建器将控制帧大小。

- (id)initWithCoder:(NSCoder *)aDecoder {
    [super initWithCoder:aDecoder]; // Required. setFrame will be called during this method.
    return [self initWithFrame:[self frame]];
}