【问题标题】:How can I make my Nib load correctly my customized UIScrollView subclass?如何让我的 Nib 正确加载我自定义的 UIScrollView 子类?
【发布时间】:2009-05-07 16:31:19
【问题描述】:

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

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

在子类化 UIScrollView 的同时仍使用 Nib 文件将其纳入透视图时,我还必须考虑其他事项吗?

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      扩展initWithCoder,一定要调用super方法。正是在这个超级通话期间,setFrame 将在您的班级上被调用。

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

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

      【讨论】:

        猜你喜欢
        • 2013-03-02
        • 2011-08-06
        • 2023-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-13
        相关资源
        最近更新 更多