首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在awakeFromNib()中调用prepareForInterfaceBuilder()

在awakeFromNib()中调用prepareForInterfaceBuilder()
EN

Stack Overflow用户
提问于 2019-04-16 10:57:04
回答 1查看 259关注 0票数 0

我是子类UIButton,并希望我的自定义按钮出现在故事板。我在awakeFromNib() (称为超级)中做了所有的更改,并添加了@IBDesignable

代码语言:javascript
复制
override func awakeFromNib(){
   super.awakeFromNib()
   ... // customization stuff
}

prepareForInterfaceBuilder()中,我需要使用我在awakeFromNib()中所做的,所以如果我直接调用awakeFromNib(),会不会导致任何不好的事情发生?如果是的话,会引起什么后果?还是完全没问题?如下所示:

代码语言:javascript
复制
override func prepareForInterfaceBuilder(){
    ...
    self.awakeFromNib()
}

还是我必须创建一个包含所有定制内容的setup()函数,然后从清醒函数和准备函数中调用它?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-16 11:04:54

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

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

在苹果关于awakeFromNib()的文档中,它说:“尽管这个方法的默认实现什么也不做,但许多UIKit类提供了非空的实现。”所以如果它什么也不做,又能叫它什么呢?

首先,你应该看看这句话的第二部分:

许多UIKit类提供非空实现。

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

您必须调用awakeFromNib的超级实现,以使父类有机会执行它们所需的任何额外初始化。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55706562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档