如果使用nib创建自定义的view

为了以后使用的时候方便,对于nib创建自定义view,我做了公用方法的抽取,以后再自定义的时候只需继承抽取出来的CustomView就ok了
一下是,具体的代码

class CustomView: UIView {

var contentV: UIView!

override init(frame: CGRect) {
    super.init(frame: frame)    //实现父初始化
    contentV = loadViewFromNib()//从xib中加载视图
    contentV.frame = bounds     //设置约束或者布局
    addSubview(contentV)        //将其添加到自身中
    setupUI()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    contentV = loadViewFromNib()//从xib中加载视图
    contentV.frame = bounds     //设置约束或者布局
    addSubview(contentV)        //将其添加到自身中
    setupUI()
}

func loadViewFromNib() -> UIView {
    
    let className = type(of: self)
    let name = NSStringFromClass(className).components(separatedBy: ".").last

    let nib = UINib(nibName:name!, bundle: Bundle(for:className))
    
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
  
    return view
}

func setupUI() {
    
}

}

使用的时候只需要继承CustomView,然后重写setupUI方法就ok了,setupUI这个方法,是用来设置一些初始化的参数的
如下实例:
自定义一个无线轮播广告的view
1、创建一个空白的nib文件


如果使用nib创建自定义的view_第1张图片
image.png

2、新建一个继承CustomView的类CircleAdsView


如果使用nib创建自定义的view_第2张图片
image.png

3、在新建的空白nib中添加需要的控件,并设置好约束
如果使用nib创建自定义的view_第3张图片
image.png

4、关联nib和新建的类
如果使用nib创建自定义的view_第4张图片
image.png

5、只需在CircleAdsView重写setupUI就可以使用自定义的view了,可以通过xib和纯代码来初始化,其他CircleAdsView内部逻辑根据自己的需求不全就可以正常使用了

你可能感兴趣的:(如果使用nib创建自定义的view)