Swift中如何从xib中加载类

我写了一个UIView的类方法

1
2
3
4
5
6
7
extension UIView {
class func viewFromXIB() -> UIView {
let classString = NSStringFromClass(self) as NSString
let view = NSBundle.mainBundle().loadNibNamed(classString.pathExtension, owner: nil, options: nil).first as! UIView
return view
}
}

这边使用NSStringFromClass(self) as NSString,由类取得类名的字符串,这边使用NSString,主要是swift的String方法我没有找到简便的方法来实现我的需求,比如现在的一个控件叫做CRLabel,而项目名为:Test01,那么由上面的操作,classString的值就会是Test01.CRLabel,在这里面Test01为命名空间,意思就是Test01命名空间下面的CRLabel文件,由于是去加载XIB文件,我们只需要后面CRLabel部分,而不需要命名空间,所以我们需要做截取工作,而.pathExtension方法正好满足我们的需求,故有了上面的写法。

写完了此分类后,以后从XIB加载文件,都可以愉快如下使用了:

lazy var label :CRLabel = {
        let view = CRLabel.viewFromXIB() as! CRLabel
        return view
}()

注:版权声明:本文为博主原创文章,未经博主允许不得转载。