我正在尝试从情节提要中实例化xib,但是却遇到了无限循环。我已经看到了这段视频片段,但是我可能做错了。我能理解为什么,但是不知道如何使它起作用... Tx寻求帮助! )
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup()
{
print("INFINITE LOOP :(")
self.view = self.loadViewFromNib()
self.view.frame = bounds
self.addSubview(self.view)
}
func loadViewFromNib() -> UIView
{
let nib: UINib = UINib(nibName: "ItemView", bundle: .main)
let view: UIView = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
return view
}
答案 0 :(得分:0)
您没有显示足够的代码,但看来您正在有效地执行此操作(我已简化了代码以专注于该问题):
class ItemView : UIView {
// called when an ItemView is loaded from a nib
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
loadViewFromNib()
}
// called to load an ItemView from a nib
func loadViewFromNib(){
let nib: UINib = UINib(nibName: "ItemView", bundle: .main)
let view: UIView = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
}
}
因此,该视图似乎是从笔尖加载的ItemView,并且在加载时它试图从笔尖加载另一个ItemView,后者试图从笔尖加载另一个ItemView。...
视图无法从这样的笔尖加载本身。您需要将所有代码放在某些 other 视图的类中,该视图将充当ItemView的超级视图。
答案 1 :(得分:0)
在Interface Builder中,在其中定义了视图的情况下,应将 File Owner's 的自定义类设置为ItemView
(或正在创建的其他类)。不要设置视图类。
不幸的是,StackOverflow不允许我发布图像,但是请参见下面的屏幕截图。
答案 2 :(得分:0)
找到了!这对某些人可能会有帮助
我正在设置视图类,而不是xib文件的“所有者”!所以xib正在创建加载xib的视图,依此类推...
通过链接上的@RealNmae: How do I create a custom iOS view class and instantiate multiple copies of it (in IB)?