swift 之xib自定义view可视化到storyboard

Posted EasyHere

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift 之xib自定义view可视化到storyboard相关的知识,希望对你有一定的参考价值。

首先直入正题:@IBInspectable & @IBDesignable

对于 @IBInspectable 和 @IBDesignable 可详见官方文档 : Creating a Custom View That Renders in Interface Builder

 

当然也可以阅读下中文版的: http://nshipster.cn/ibinspectable-ibdesignable/

如果自定view是自己用纯代码写的,对于上面两种处理都比较简单,只需要指定类名即可。

 

但是如果这个自定义view是用写的,那么如果让xib的界面直接render到storyboard呢?

1. 创建一个IDView,添加一个IDView.Xib

技术分享

 

2. 对IDCard.xib添加约束

技术分享

 

3. 在IDCard.xib的 File‘s Owner class 设置为IDCard:

技术分享

4. 在IDCard.swift中添加如下代码,把xib的view连线到代码上的contentView:

技术分享

5. 绑定xib,实现 @IBInspectable, @IBDesignable这几部分代码

 

@IBDesignable
class IDCard: UIView {
    
    @IBOutlet var contentView: UIView!
    

    @IBInspectable
    var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = cornerRadius
            layer.masksToBounds = cornerRadius > 0
        }
    }
    @IBInspectable
    var borderWidth: CGFloat = 0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }
    @IBInspectable
    var borderColor: UIColor? {
        didSet {
            layer.borderColor = borderColor?.CGColor
        }
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        initialFromXib()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        initialFromXib()
    }
    
    func initialFromXib() {
        let bundle = NSBundle(forClass: self.dynamicType)
        let nib = UINib(nibName: "IDCard", bundle: bundle)
        contentView = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
        contentView.frame = bounds
        addSubview(contentView)
        
    }
    
}

 

 

6. 在Main.storyboard实现拖入view,并指定其class为IDCard,并对其进行约束

技术分享

 

7. 运行代码,结果如下

技术分享

 

 

总结遇到的一些坑:

 

 

以上是关于swift 之xib自定义view可视化到storyboard的主要内容,如果未能解决你的问题,请参考以下文章

swift3 xib自定义view

ios开发之 -- xib关联自定义view

如何:在iOS中使用StackView View从XIB自我调整自定义视图

Swift:无法从 xib 访问子视图

iOS--控制器加载自定义view的xib

iOS正确的自定义View方式