在 IOS 开发中,我们经常会自定义视图 (UIView),有时界面的布局可能使用 XIB 文件可视化的方式会更方便。但是 Xcode 新建视图时并不能选择 Also create XIB file,所以需要单独创建 XIB 文件。而单独创建的 XIB 文件并不会和创建的视图类自动关联起来,这就需要我们手动关联并且使用代码加载 XIB 文件。

1. 在 XIB 设计中,选择右边第四个标签 (Identity),鼠标放上去的时候会显示 Show the Identity inspector。我用的 Xcode 版本是 Version 12.5.1 (12E507),不同版本可能会有差异。

在 Class 出填入你创建的类的名称,例如 CustomView,那就填写 CustomView,这样就把创建的类和 XIB 文件关联起来了。就可以拖拽控件到类中,自动生成一些代码

2. 由于在类中的 init 方法并不能读取 XIB 文件,而且在 init 方法中不能访问 self,所有我们需要新建一个方法,用来从 XIB 文件中读取信息并创建对象。这个方法必须是静态的,这样我们就可以使用类名直接调用,从了创建对象。这个方法可以定义为类似下面:

    static func loadFromNib(frame: CGRect, titleImage: String, mainTitle: String, subTitle: String) -> CustomView {
        let view = Bundle.main.loadNibNamed("CustomView", owner: self, options: nil)?.first as! CustomView

        
        return view
    }

通过上面这个方法,我们就可以创建一个 CustomView 对象。

我们还可以创建另外一个方法,用来初始化视图,这样代码更加清晰一些,不至于 loadFromNib 方法太过庞大,并且在这个方法中还可以使用 self,也方便了不少。类似如下:

    func setupViews(frame: CGRect, titleImage: String, mainTitle: String, subTitle: String) {
        self.frame = frame
        
        self.backgroundColor = .clear
}

可以在 loadFromNib 直接调用这个方法即可:

view.setupViews(frame: frame, titleImage: titleImage, mainTitle: mainTitle, subTitle: subTitle)
自律 平静 思考 实践