使用什么作为 NSCoder 来初始化视图?

What to use as NSCoder to initialize a View?

大家好,我创建了一个新的自定义视图 Class,现在我想构建它的一个实例,我使用以下代码对其进行了初始化:

required init?(coder aCoder: NSCoder) {
        super.init(coder: aCoder)
           tapRecognizer = UITapGestureRecognizer(
                           target: self, action: #selector(handleBarTap))
           addGestureRecognizer(tapRecognizer)
       }

       deinit {
           removeGestureRecognizer(tapRecognizer)
       }

这是实例,但我可以用什么作为编码器?

lazy var chartView = TutorialChartView(coder: )

提前致谢!

当你说视图时,你指的是 UIView 吗?问题是那是错误的初始值设定项。 init(coder:) 不是你所说的;这是一个由故事板启动的过程,当故事板中有这些东西之一并且您加载该视图控制器时。

UIView指定初始化代码是init(frame:)。实现并调用它,一切就绪。

(您可能 必须提供 init(coder:) 的实现,但它应该只是抛出一个 fatalError,因为您不希望被调用这样。)

您不应该使用 coder 作为创建 class 的初始值设定项,而是使用 frame,这里是您以 frame-style 初始化编写的代码。

    override init(frame: CGRect) {
    super.init(frame: frame)
    tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleBarTap))
    addGestureRecognizer(tapRecognizer)
}

    required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

以下是使用方法:

 lazy var chartView = TutorialChartView(frame: CGRect(x: 0, y: 0, width: 200, height: 200)