我在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
谢谢你的帮助
答案 0 :(得分:4)
为了避免无限循环,您必须从CustomView
进入XIB并将文件所有者与customView
swift Class相关联。
Carefull,你的xib类(故事板层次结构中的“视图”)必须是UIView
而不是CustomView
。
如果不执行此操作,则使用布尔值的换行不起作用,因为您在每个循环中创建了一个新实例。 干杯
答案 1 :(得分:1)
instantitateWithOwner
加载一个nib / xib文件,该文件又调用init(coder aDecoder: NSCoder)
。 (来源:Apple documentation)
这就是你获得无限循环的原因。您可以从init方法中删除XibSetup以停止循环。