我是子类UIButton,并希望我的自定义按钮出现在故事板。我在awakeFromNib() (称为超级)中做了所有的更改,并添加了@IBDesignable。
override func awakeFromNib(){
super.awakeFromNib()
... // customization stuff
}在prepareForInterfaceBuilder()中,我需要使用我在awakeFromNib()中所做的,所以如果我直接调用awakeFromNib(),会不会导致任何不好的事情发生?如果是的话,会引起什么后果?还是完全没问题?如下所示:
override func prepareForInterfaceBuilder(){
...
self.awakeFromNib()
}还是我必须创建一个包含所有定制内容的setup()函数,然后从清醒函数和准备函数中调用它?
谢谢。
发布于 2019-04-16 11:04:54
您应该将代码组合到一个方法中(就像您提到的setup() ),并在awakeFromNib()和prepareForInterfaceBuilder()中调用它,而不是手动调用awakeFromNib()。
awakeFromNib是视图生命周期方法之一,意味着系统应该在特定状态下调用它。避免自己调用这样的方法;您应该做的是提供在awakeFromNib被调用时执行所需的功能,而不是自己调用它。
在苹果关于awakeFromNib()的文档中,它说:“尽管这个方法的默认实现什么也不做,但许多UIKit类提供了非空的实现。”所以如果它什么也不做,又能叫它什么呢?
首先,你应该看看这句话的第二部分:
许多UIKit类提供非空实现。
这意味着应该运行特定的代码(在super. awakeFromNib中):
您必须调用awakeFromNib的超级实现,以使父类有机会执行它们所需的任何额外初始化。
第二,即使这样做没有坏处,您也不应该这样做,您不应该遵循调用系统调用的方法的方法。
https://stackoverflow.com/questions/55706562
复制相似问题