初始化后访问自定义 UIButton 类中的插座

Posted

技术标签:

【中文标题】初始化后访问自定义 UIButton 类中的插座【英文标题】:Access outlets in a custom UIButton class after initialization 【发布时间】: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

【问题讨论】:

【参考方案1】:

在您的 UIButton 子类中实现 -awakeFromNib

来自the official documentation:

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

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

【讨论】:

我不明白为什么我错过了这个......这让我发疯了。感谢您的回答!但似乎titleLabel 甚至不是一个出口,所以这一切都不是必需的,我收到的错误确实来自代码中的另一个点。

以上是关于初始化后访问自定义 UIButton 类中的插座的主要内容,如果未能解决你的问题,请参考以下文章

无法在连接的自定义 UITableViewCell 类中制作插座

自定义 UIView 类中的 UIButton 不起作用

按钮未在自定义 UIButton 中注册触摸

UIButton 不适用于自定义 UITableViewCell (Swift)

从 UIViewController 类中隐藏自定义视图 UIButton

未调用自定义 UIButton 的 setIsSelected 方法