从故事板上的xib实例化视图时出现无限循环。
从故事板上的xib实例化视图时出现无限循环。
我正在尝试从故事板实例化一个xib,但是我得到了一个无限循环。我已经看到在视频中这个代码片段可以工作,但是我可能做错了什么。我可以理解为什么会出错,但是不知道如何让它工作...谢谢帮助!)
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 }
admin 更改状态以发布 2023年5月22日
你没有展示足够的代码,但是看起来你正在有效地做这件事(我已经简化了你的代码来关注问题):
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 } }
因此,这个视图是从nib中加载的ItemView,并且在加载时它尝试从nib中加载另一个ItemView,然后再尝试从nib中加载另一个ItemView....
一个视图不能像那样从一个nib中加载自己。你需要把所有的代码放在某个其他视图的类中,这个视图将充当ItemView的父视图。