Xib套用Xib实现方式swfit

swift

写了那么多年iOS尽然一直不会“xib中套用xib”,是我遗忘了吗,还是老司机一直在混日子啊。记录下,保持一颗学习的心态。

疑惑

开开心心码好代码,觉得自己干了一件天大的事情,我把之前分散在3个页面的相同显示进行了统一。以后维护轻轻松松,快快乐乐的。666 没想到运行就崩溃。

/路径/RouteDetail/HXQTravelCostView.swift, line 38
2020-09-10 14:01:56.639258+0800 qiji[14481:202509] Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value: file /路径/HXQTravelCostView.swift, line 38

查看崩溃的代码


崩溃

添加的Label等组件都是nil,导致设置值的时候崩溃了。

错误使用

创建了view和相同名字的xib,并设置xib的custom class后。就在其他xib中进行直接引用。


引用

好简单的使用,暗自开心呢!没想到会崩溃。

正确使用

问了一圈度娘后,还是给出了答案。改造不麻烦,只是操作有点不一样。


修改
  1. 先选中1的view,然后删除右边对应的3位置的Custom Class中的Class。
  2. 然后选中2的File's Owner,设置右边3位置Custom Class中Class为自定义view的名称。
修改2

将view (修改2图中1位置)拉一条线到自定义view的class中,创建一个contentView(图中2位置)。做好这些后,就可以在contentView中轻松添加自己想要添加的控件了。HAPPY
最后实现加载contentView。

required init?(coder: NSCoder) {
        super.init(coder: coder)
       
        Bundle.main.loadNibNamed("HXQTravelCostView", owner: self, options: nil)
        self.addSubview(self.contentView)
        self.contentView.snp.makeConstraints { (make) in
            make.edges.equalToSuperview()
        }
    }

添加contentView到self上,使用SnapKit第三方库进行添加约束。

Done 大功告成,轻松愉快的复用自定义xib了。

// END 每天进步一点点,踏踏实实做人