定制按钮的初始化程序

时间:2015-12-03 04:19:13

标签: ios swift

class BorderedButton: UIButton {

   // Some properties

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        self.themeBorderedButton()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.themeBorderedButton()
    }

    func themeBorderedButton() {
         //sets up the button
    }

}

我一直在为我的项目阅读一些代码,但我遇到了这个问题。我已经阅读了Swift 2.0的初始化文档,我知道对于override init我们只是从UIView覆盖init,并且在我们以编程方式创建按钮时会调用此初始化程序。我们在故事板中创建按钮时调用required init

我的第一个问题是:

在代码中确切地指出了这个required init,因为我查看了NSCoder的所有超类,并且没有一个方法具有required init

我的第二个问题是:

NSCoder究竟是什么阅读了文档,我粗略地了解它传输信息,但除此之外我还需要知道什么吗?在一个非平凡的应用程序中,类NSCoder会被大量使用吗?

1 个答案:

答案 0 :(得分:1)

UIView符合NSCoding协议,该协议需要init(coder:)

UIKit使用NSCoder加载视图,查看层次结构和查看故事板和XIB文件中定义的控制器。

NSCoder是一种在iOS中存储和加载结构化数据的方案。它主要通过NSKeyedArchiverNSKeyedUnarchiver使用。

除了上面提到的情况,我不建议在任何地方使用它,尤其是因为保持向后的comaptilbity变得更加困难与Swift。