【问题标题】:Access outlets in a custom UIButton class after initialization初始化后访问自定义 UIButton 类中的插座
【发布时间】:2011-06-15 10:47:14
【问题描述】:

如果有一个自定义的UIButton 类并希望在初始化后访问它的titleLabel 出口。通常人们会在 viewDidLoad 方法中这样做,但这仅适用于 Controller 类。初始化后如何直接访问基类的任何出口?

这里有一点代码sn-p,因为大多数时候后面会更清楚

- (id) initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        // Here the outlet is still 'nil'
    }
    return self;
}

- (void) viewDidLoad {
    // Not usable with UIControls
}

【问题讨论】:

    标签: iphone objective-c ios uiview uicontrol


    【解决方案1】:

    在您的 UIButton 子类中实现 -awakeFromNib

    来自the official documentation

    nib 加载基础架构向从 nib 存档重新创建的每个对象发送 awakeFromNib 消息,但前提是存档中的所有对象都已加载和初始化。当一个对象收到一个 awakeFromNib 消息时,保证它的所有出口和动作连接都已经建立。

    您必须调用 awakeFromNib 的超级实现,以使父类有机会执行它们需要的任何其他初始化。虽然这个方法的默认实现什么都不做,但是很多 UIKit 类都提供了非空的实现。您可以在自己的 awakeFromNib 方法中随时调用超级实现。

    【讨论】:

    • 我不明白为什么我错过了这个......这让我发疯了。感谢您的回答!但似乎titleLabel 甚至不是一个出口,所以这一切都不是必需的,我收到的错误确实来自代码中的另一个点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多