在prepareForInterfaceBuilder()中调用awakeFromNib()

时间:2019-04-16 10:57:05

标签: ios swift

我正在继承UIButton,并希望我的自定义按钮出现在Storyboard中。我在awakeFromNib()中进行了所有更改(称为“超级”),并添加了@IBDesignable

override func awakeFromNib(){
   super.awakeFromNib()
   ... // customization stuff
}

prepareForInterfaceBuilder()中,我需要使用在awakeFromNib()中所做的事情,因此,如果我直接致电awakeFromNib(),这会导致不良情况发生吗?如果是,它将导致什么?还是完全可以的?像这样:

override func prepareForInterfaceBuilder(){
    ...
    self.awakeFromNib()
}

还是我必须使用自己的所有自定义功能创建一个setup()函数,然后从清醒和准备函数中调用它?

谢谢。

1 个答案:

答案 0 :(得分:2)

您应该将代码合并到一个方法中(就像您提到的setup()一样,并在awakeFromNib()prepareForInterfaceBuilder()中都调用它,而不是手动调用awakeFromNib()

awakeFromNib是视图生命周期方法之一,这意味着系统应在特定状态下调用它。避免自己调用这种方法;您应该做的就是提供在awakeFromNib被调用但自己不是调用时执行的功能。

  在Apple文档中有关awakeFromNib()的

上说“尽管   此方法的默认实现不执行任何操作,许多UIKit类   提供非空的实现。”。因此,如果不执行任何操作,可以做什么?   称其为原因?

首先,您应该看一下句子的第二部分:

  

许多UIKit类提供非空的实现。

这意味着应该运行特定的代码(在super. awakeFromNib中):

  

您必须调用awakeFromNib的超级实现才能给父级   类机会执行任何其他初始化操作   要求。

第二,即使这样做没有害处,也不应这样做,也不应遵循调用系统调用的方法的方法。