【问题标题】:How does initWithCoder work in combination with Interface Builder?initWithCoder 如何与 Interface Builder 结合使用?
【发布时间】:2014-02-17 12:04:14
【问题描述】:

我有一个来自 UITextField 的子类,我在 Interface Builder 中使用它来构建我的视图(所以我直接在 Interface Builder 中将此对象的类设置为 MyCustomTextField)。

现在,我明白了,当视图被加载时,initWithCoder: 方法MyCustomTextField 将被调用,这样我就可以做一些初始化工作。但是,我还发现我在 Interface Builder 中使用 Attribute Inspector 设置的属性并没有按照我设置它们的方式进行初始化!

有谁知道为什么会出现这种情况以及如何将 MyCustomTextField 实例的属性设置为我在 Interface Builder 的属性检查器中设置的值?

【问题讨论】:

  • UI 类的大多数初始化应该在awakeFromNib 方法中进行,而不是在init 中。是否可以将您的“初始化内容”移至该方法?

标签: ios initialization interface-builder xib nscoder


【解决方案1】:

您可能没有从您对此方法的自定义覆盖中调用[super initWithCoder:coder]。在这个超级实现中,数据从 nib 存档加载到 UIView 实例中。正确的实现应该如下所示:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (nil != self) {
        // extra initialization code
    }
    return self;
}

【讨论】:

    猜你喜欢
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2014-07-23
    • 2010-09-13
    • 2010-12-16
    相关资源
    最近更新 更多