3

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

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

在将 UIScrollView 子类化同时仍使用 Nib 文件将其置于透视图中时,我还必须考虑其他一些事情吗?

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

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

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

4

2 回答 2

3

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

于 2009-05-07T17:02:18.670 回答
1

Extend 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]];
}
于 2011-04-29T20:41:28.130 回答