博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift 第十四课 可视化view: @IBDesignable 、@IBInspectable
阅读量:5236 次
发布时间:2019-06-14

本文共 3847 字,大约阅读时间需要 12 分钟。

以前应objctiew-c 写项目的时候,就知道有这两个关键字,现在用swift了。用法稍作改变,基本用法还是一致的

虽然使用这个之后,有时候会报错的非常的莫名其妙----(其实还是自己技术不够牛……)

先把可能的报错,解决方法链接附上:

http://stackoverflow.com/questions/27374330/ibdesignable-error-ib-designables-failed-to-update-auto-layout-status-interf

http://www.jianshu.com/p/a5351d270ac1

这样咱们就开始啦啦……

先附上demo 的运行效果:::::

这两个视图,都是xib 创建的,绿色的是代码 init frame ,黄色边框的是 init coder……

 

 

既然demo 都做出来了,现在开始记录步骤:::::::::::::

显示 demo view 的步骤:

1.newfile 一个 继承于UIView 的class ---- DemoView

2.newfile 一个 xib view 名字改为 ---- DemoView

3.这一步很重要 贴个图给解释 ,这样应该会更直观

 

顺便贴上  demoview 的代码 和 viewcontroller的调用代码,好了 T T

import UIKitclass DemoView: UIView {    @IBOutlet var contentView: UIView!        var borderWidth :CGFloat = 0 {        didSet{          self.layer.borderWidth = borderWidth        }    }        var borderColor :UIColor?{        didSet{                 self.layer.borderColor = borderColor?.cgColor        }    }        var cornerRadius :CGFloat = 0{        didSet{        self.layer.cornerRadius = cornerRadius        }    }        override init(frame: CGRect) {        super.init(frame: frame)        initialFromXib()    }        required init?(coder aDecoder: NSCoder) {        super.init(coder: aDecoder)    }        func initialFromXib(){                let bundle = Bundle(for: type(of: self))        let nib = UINib(nibName: "DemoView", bundle: bundle)        contentView = nib.instantiate(withOwner: self, options: nil)[0]  as! UIView        contentView.frame = bounds        addSubview(contentView)    }}

调用方法的代码::::::

import UIKitclass ViewController: UIViewController {    override func viewDidLoad() {        super.viewDidLoad()                addDemoView()    }    override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()    }    /*     init frame 方式加载xib view     */    func addDemoView()  {                let demoview = DemoView.init(frame: CGRect(x:20,y:20,width:200,height:200))        self.view.addSubview(demoview)                demoview.borderColor = UIColor.green        demoview.borderWidth = 5        demoview.cornerRadius = 100    }}

如果做到这里,那么这个基础的xib view 就已经可以使用了,

当然,现在还没有进入这个博客的主题,现在公布,可在storyboard 实时更新的xib view(这个xib view 必须继承UIView)

xib view 的实现步骤::::

1.newfile 一个 继承于UIView 的class ----XibView

2.newfile 一个 xib view 名字改为 ---- XibView

3.同样给张图

途中都可以看到,我使用了@IBDesignable 、@IBInspectable 这两个关键字,

那么 在storyboard 中怎么看@IBInspectable修饰的属性呢

     

 

 

 

 

文字都在代码中注释看吧   666

 

import UIKit/** @IBDesignable 加入这个关键字说明:这个类(这个类必须是UIView或者NSView的子类)可以被 xib 或者 storybord 检测到 */@IBDesignable class XibView: UIView {    @IBOutlet var contentView: UIView!    /**     @IBInspectable  加入这个属性说明:这个属性可以 被xib 或者 storybord 检测到     但是要重写这个属性的set 方法     */    @IBInspectable  var borderWidth: CGFloat = 0 {        didSet {            layer.borderWidth = borderWidth        }    }        @IBInspectable var cornerRadius :CGFloat = 0{        didSet{//           layer.cornerRadius = cornerRadius           self.contentView.layer.cornerRadius = cornerRadius        }    }        @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 = Bundle(for: type(of: self))        let nib = UINib(nibName: "XibView", bundle: bundle)        contentView = nib.instantiate(withOwner: self, options: nil)[0]  as! UIView        contentView.frame = bounds        addSubview(contentView)    }}

 

最后 写上自己莫名其妙的一个问题,发泄自己的小抱怨

Failed to update auto layout status: The agent crashed / Failed to render instance of XXXXXXX: The agent crashed

 刚刚开始写完的时候出现这个错误,把xcode 关闭,重新打开后,报错神奇般的消失了,没有给了理由--(问谁说理……)

 

转载于:https://www.cnblogs.com/Bob-blogs/p/6594516.html

你可能感兴趣的文章
bzoj 2005 & 洛谷 P1447 [ Noi 2010 ] 能量采集 —— 容斥 / 莫比乌斯反演
查看>>
VS 2012 RC 中的改变汇总
查看>>
MVC 之下载 我的实践
查看>>
分享一个用Xcode4实现基于Webservice用户登录的iphone程序
查看>>
最优化算法-割线法
查看>>
Python学习——数学相关模块函数以及随机数模块的使用
查看>>
Array JSON
查看>>
jQuery中的事件与应用
查看>>
wpf设置字体颜色渐变和字体阴影
查看>>
Prism 文档 第二章 初始化Prism应用程序
查看>>
Win32 基本文件读写操作
查看>>
WPF中XAML中使用String.Format格式化字符串示例
查看>>
delphi ICS控件示例解读
查看>>
Object 转化为String时的一个问题 null->"null"
查看>>
Python列出文件夹中的文件
查看>>
PowerDesigner生成Oracle格式的SQL时去掉字段名的双引号
查看>>
(转载)关于Linux C函数strtok的使用要点
查看>>
C#委托、事件剖析(上)
查看>>
P1631 序列合并
查看>>
Luogu_4886 快递员
查看>>