初始化后访问自定义 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 类中制作插座
UIButton 不适用于自定义 UITableViewCell (Swift)