将 UIView 的自身替换为 Swift 中的另一个实例
Replacing UIView's self with another instance in Swift
我想在 Swift 中以编程方式初始化 xib
文件,所以我创建了 class MyView
.
xib
的初始化是在setup()
方法中声明的,这里调用了loadNibNamed()
。这个 returns 一个额外的视图,我必须将其作为子视图添加到我的 current/initial 视图中。
我在User Interface Inspector
看到MyView
后面是初始视图,当然也有自己的属性。我不喜欢这种行为,也不想两次修改属性。最后,我想实现初始化器中的实例可以替换为调用 loadNibNamed()
; 创建的实例;像 self = view
.
这样的比喻
我添加了初始化代码和 setup()
方法。
required init?(coder aDecoder: NSCoder) {
NSLog("init with NSCoder")
super.init(coder: aDecoder)
}
init(in frame: CGRect) {
NSLog("init with CGRect")
super.init(frame: frame)
setup()
}
private func setup() {
NSLog("setting up")
let view = Bundle.main.loadNibNamed("MyView", owner: self, options: nil)!.first as! MyView
addSubview(view)
}
您不能在初始化程序中用一个自己替换另一个。 init
和 nib-loading 是相关的,但这种关系与您的建议相反:从 nib 加载视图将调用您的 init(coder:)
.
您需要的不是初始化程序,而是工厂。
为 MyView 提供一个 class 方法 (class func
),客户端可以调用该方法来加载 nib 和 return 实例。
class func new() -> MyView {
let view = Bundle.main.loadNibNamed("MyView", owner: nil, options: nil)!.first as! MyView
return view
}
用法:
let v = MyView.new()
我想在 Swift 中以编程方式初始化 xib
文件,所以我创建了 class MyView
.
xib
的初始化是在setup()
方法中声明的,这里调用了loadNibNamed()
。这个 returns 一个额外的视图,我必须将其作为子视图添加到我的 current/initial 视图中。
我在User Interface Inspector
看到MyView
后面是初始视图,当然也有自己的属性。我不喜欢这种行为,也不想两次修改属性。最后,我想实现初始化器中的实例可以替换为调用 loadNibNamed()
; 创建的实例;像 self = view
.
我添加了初始化代码和 setup()
方法。
required init?(coder aDecoder: NSCoder) {
NSLog("init with NSCoder")
super.init(coder: aDecoder)
}
init(in frame: CGRect) {
NSLog("init with CGRect")
super.init(frame: frame)
setup()
}
private func setup() {
NSLog("setting up")
let view = Bundle.main.loadNibNamed("MyView", owner: self, options: nil)!.first as! MyView
addSubview(view)
}
您不能在初始化程序中用一个自己替换另一个。 init
和 nib-loading 是相关的,但这种关系与您的建议相反:从 nib 加载视图将调用您的 init(coder:)
.
您需要的不是初始化程序,而是工厂。
为 MyView 提供一个 class 方法 (class func
),客户端可以调用该方法来加载 nib 和 return 实例。
class func new() -> MyView {
let view = Bundle.main.loadNibNamed("MyView", owner: nil, options: nil)!.first as! MyView
return view
}
用法:
let v = MyView.new()