使用Xib创建自定义View - BCXibView

刚开始学习ios的时候从StoryBoard开始,当时主要是因为简单,且相关教程都是教使用SrotyBoard。后来去实习时候学习了使用代码写布局后喜欢上了代码布局的精准性。
但实际项目中发现代码布局往往把项目代码弄得特别繁多,后期维护起来非常费劲且不客观。即使使用Masonry等都只是一定程度的简化了代码,但不解决根本问题。
后来项目中开始使用Xib和SrotyBoard配合,UI相关的用就用Interface Builder + Autolayout解决。不过不能直接从Xib初始化UIView。所以写了个UIView基类BCXibView。方便使用Xib初始化UIView。

BCXibView

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//
// BCXibView.swift
// HFUTer
//
// Created by Eliyar Eziz on 15/9/9.
// Copyright (c) 2015年 Eliyar Eziz. All rights reserved.
//

import UIKit

class BCXibView: UIView {

var view:UIView?

func initFromXib(){
//获取Xib文件名字
let xibName = NSStringFromClass(self.classForCoder)
let xibClassName = xibName.characters.split{$0 == "."}.map(String.init).last
//使用Xib初始化一个View
let view = NSBundle.mainBundle().loadNibNamed(xibClassName, owner: self, options: nil).first as! UIView
view.frame = self.bounds
view.translatesAutoresizingMaskIntoConstraints = true
view.autoresizingMask = [.FlexibleWidth,.FlexibleHeight]
self.addSubview(view)
self.view = view
}

override init(frame: CGRect) {
super.init(frame: frame)
initFromXib()
}

required init(coder aDecoder: NSCoder) {
super.init(coder:aDecoder)!
initFromXib()
}
}

用法

创建同名的UIView文件和Xib文件。将Xib文件的File's Owner -> Custom class -> Class属性设置为同名的类。

///例如创建一个theCustomView

//初始化
let customView = theCustomView() //常规初始化即可,也可以用StoryBoard初始化


//theCustomView.swift
theCustomView:BCXibView {

    override func initFromXib() {
        super.initFromXib()
        //初始化后的操作,例如一些UI调整等。
        self.view?.backgroundColor = UIColor.red()//直接可以调整Xib View的背景颜色
    }
}