使用什么作为 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)
大家好,我创建了一个新的自定义视图 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)