UIView 的初始化编码器在调用 instantiateWithOwner 后重新加载
init coder of UIView reload after call instantiateWithOwner
我在 swift 中自定义了 uiview
,这是代码
@IBDesignable public class HomeScreenCodeView: UIView {
var view :UIView!
var nibName : String = "HomeScreenView"
override init(frame: CGRect) {
// 1. setup any properties here
// 2. call super.init(frame:)
super.init(frame: frame)
// 3. Setup view from .xib file
xibSetup()
}
required public init(coder aDecoder: NSCoder) {
// 1. setup any properties here
// 2. call super.init(coder:)
super.init(coder: aDecoder)
// 3. Setup view from .xib file
xibSetup()
}
func xibSetup() {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight
addSubview(view)
}
func loadViewFromNib() -> UIView {
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: nibName , bundle: bundle)
// Assumes UIView is top level and only object in CustomView.xib file
let view = nib.instantiateWithOwner(self, options: nil)[0] as UIView
return view
}
问题出在调用时let view = nib.instantiateWithOwner(self, options: nil)[0] as UIView
init coder
召回和xibSetup()
召回,这导致无限循环。
如何解决这个问题并阻止init重新加载。
感谢您的帮助
instantitateWithOwner
加载一个 nib/xib 文件,该文件又调用 init(coder aDecoder: NSCoder)
。 (来源:Apple documentation)
这就是你得到那个无限循环的原因。您可以从 init 方法中删除 XibSetup 以停止循环。
为了避免无限循环,您必须从 CustomView
进入 XIB,并将文件所有者关联到您的 customView
swift Class。
小心,你 xib 的 class(故事板层次结构中的 "View")必须是 UIView
而不是 CustomView
。
如果你不这样做,布尔值换行将无法工作,因为你在每个循环中创建了一个新实例。
干杯
我在 swift 中自定义了 uiview
,这是代码
@IBDesignable public class HomeScreenCodeView: UIView {
var view :UIView!
var nibName : String = "HomeScreenView"
override init(frame: CGRect) {
// 1. setup any properties here
// 2. call super.init(frame:)
super.init(frame: frame)
// 3. Setup view from .xib file
xibSetup()
}
required public init(coder aDecoder: NSCoder) {
// 1. setup any properties here
// 2. call super.init(coder:)
super.init(coder: aDecoder)
// 3. Setup view from .xib file
xibSetup()
}
func xibSetup() {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight
addSubview(view)
}
func loadViewFromNib() -> UIView {
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: nibName , bundle: bundle)
// Assumes UIView is top level and only object in CustomView.xib file
let view = nib.instantiateWithOwner(self, options: nil)[0] as UIView
return view
}
问题出在调用时let view = nib.instantiateWithOwner(self, options: nil)[0] as UIView
init coder
召回和xibSetup()
召回,这导致无限循环。
如何解决这个问题并阻止init重新加载。
感谢您的帮助
instantitateWithOwner
加载一个 nib/xib 文件,该文件又调用 init(coder aDecoder: NSCoder)
。 (来源:Apple documentation)
这就是你得到那个无限循环的原因。您可以从 init 方法中删除 XibSetup 以停止循环。
为了避免无限循环,您必须从 CustomView
进入 XIB,并将文件所有者关联到您的 customView
swift Class。
小心,你 xib 的 class(故事板层次结构中的 "View")必须是 UIView
而不是 CustomView
。
如果你不这样做,布尔值换行将无法工作,因为你在每个循环中创建了一个新实例。 干杯