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. 运行代码,结果如下

总结遇到的一些坑:

 

时间: 2024-12-21 01:19:12

swift 之xib自定义view可视化到storyboard的相关文章

iOS中 xib自定义View在storyboard中的使用

1,创建UIView 的SubClass 命名为MyView 2, new一个名为MyView的xib p1 3,配置xib的属性 p2 4,为View 添加背景色,添加一个按钮并定制按钮约束,这里我添加的约束为垂直居中,Button与View等宽,Button左边起点位置为0. p3 5,设置xib中的File’s owner = MyView, 拖拽view 到关联的代码中命名为contentView p4 6, 在storyboard 中对ViewController 添加一个View,之

IOS 使用XIB 自定义View

一般自定义View       代码方式 有 在初始化的时候添加 子Views - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // add subviews } return self; } 还有种 是自己画. 重载 - (void)drawRect:(CGRect)rect { } 如果  布局复杂的话  这种代码方式  可以郁闷死人   看不到效果,慢慢调 ,代码冗长..

iOS开发 --UIScrollView添加xib自定义view

实现功能:3步注册流程,点击下一步进入下一个页面,填写信息. 实现思路: 1.由于需要在第一个注册页面添加“退出注册”的按钮,所以没有使用UINavigation实现.而是使用一个UIController. 2.三个注册页长度不同,所以将UIScrollView作为subView添加到VC的view中(UIScrollView的frame长宽写定). 3.自定义三个UIView,当需要展示某个view时,根据此view的frame改变UIScrollview的contentViewSize 具体

iOS 用xib自定义view控件 debug笔记

1.在view不是很复杂的情况下,如果多次检查后依旧出现coding-compliant这种情况,干脆彻底删除这个xib重新新建一个xib来做一遍.(至今未明真相) 2.初始化xib中的view的大致步骤: //在superView中调用此方法以初始化此view + (XTTopFloatingView*)instanceXTTopFloatingView{ NSArray *nibView = [[NSBundle mainBundle]loadNibNamed:@"XTTopFloating

xib自定义View

1.用xib创建一个view,命名为HeaderView. 2.创建一个类HeaderView继承自UIView. 3.修改xib中如下数据 这里写自己刚刚创建的HeaderView. 4. #import <UIKit/UIKit.h> @interface HeaderView : UIView +(instancetype)headerView; @end 5. #import "HeaderView.h" @implementation MentorMineHead

swift3 xib自定义view

// 方法1  testView中写一个实例化方法 //可以把参数传过来,也可以不传参数, 直接用Bundle.main.loadNibNamed("testView", owner: self, options: nil)?.last as! testView 初始化实例 var dataArray:NSMutableArray? class func instanceViewWithArray(array:NSArray) -> testView{ let view = Bu

swift高斯模糊的自定义view

var bgImage = UIImageView() var backButton = UIButton() var titleLabel = UILabel() let screen_h = UIScreen.main.bounds.height let screen_w = UIScreen.main.bounds.width override init(frame: CGRect) { super.init(frame: frame) initUI() } required init?(

XIB方式view的封装

1.为什么要view的封装 注意: 1.外界创建了XIb自定义的View,如果没有设置尺寸的话,其默认的尺寸是xib中描述尺寸,位置是(0, 0) 2.布局内部的自控件的时候尽量使用Autolayou方式布局 l如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心 l外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子控件设置对应的数 2.封装的步骤 在initWithFrame:方法中添加子控件,提供便利构造方法  注意

自定义View的两种方式

(一)xib自定义view 1.思路 1)首先创建AppView类是,勾选上xib,就会创建出AppView.h,AppView.m,AppView.xib三个文件 2)先在AppView.xib文件上拖拽相应的控件,并进行适配 3)同样在AppView.h文件中,提供一个类方法创建AppView对象,并添加一个数据模型属性,用于向AppView传递模型 4)在AppView.m文件中,实现类方法,并在数据模型的set方法中实现对成员view内容的设置更新,将需要用到的空间属性通过拖线到.m文件