iOS @IBDesignable和@IBInspectable

http://www.tuicool.com/articles/JVNRBjY

@IBDesignable和@IBInspectable

时间 2014-10-08 11:02:03  CSDN博客

原文  http://blog.csdn.net/tounaobun/article/details/39890667

主题 Interface BuilderObjective-C

最近一直在看苹果公司提供的两本swift官方教程电子书,一部是《The Swift Programming Language》,另一部是《Using Swift With Cocoa and Objective-C》。昨天正好看到第二部电子书的“Writing Swift Classes with Objective-C Behavior”这一节,其中讲述了关于实时渲染这一技术。下面是摘抄的其中一段内容:

“Live Rendering
You can use two different attributes—@IBDesignable and @IBInspectable—to enable live, interactive custom view design in Interface Builder. When you create a custom view that inherits from the UIView class or the NSView class, you can add the @IBDesignable attribute just before the class declaration. After you add the custom view to Interface Builder (by setting the custom class of the view in the inspector pane), Interface Builder renders your view in the canvas.

You can also add the @IBInspectable attribute to properties with types compatible with user defined runtime attributes. After you add your custom view to Interface Builder, you can edit these properties in the inspector.

SWIFT

@IBDesignable
class MyCustomView: UIView {
  @IBInspectable var textColor: UIColor
  @IBInspectable var iconHeight: CGFloat
  /* ... */
}
”

摘录来自: Apple Inc. “Using Swift with Cocoa and Objective-C”。 iBooks. https://itunes.apple.com/cn/book/using-swift-cocoa-objective/id888894773?mt=11

其大意就是说,可以将自定义的代码实时渲染到Interface Builder中。而它们之间的桥梁就是通过两个指令来完成,即@IBDesignable和@IBInspectable。我们通过@IBDesignable告诉Interface Builder这个类可以实时渲染到界面中,但是这个类必须是UIView或者NSView的子类。通过@IBInspectable可以定义动态属性,即可在attribute inspector面板中可视化修改属性值。

话不多说,下面举一个简单的例子,这个例子自定义一个UIView的子类,该子类拥有一个UIButton。

import UIKit

@IBDesignable
class MyCustomView: UIView {

  @IBInspectable var buttonTitleColor: UIColor!		 //  button title color
  @IBInspectable var buttonTitle: String!			   //  button title
  @IBInspectable var buttonFrame: CGRect!			   //  button frame

  var myButton: UIButton!

  override init(frame: CGRect) {
    // init stored properties
    buttonTitleColor = UIColor.redColor()
    buttonTitle = "button title"
    buttonFrame = CGRectMake(0, 0, 100, 50)

    myButton = UIButton(frame: buttonFrame)
    myButton.setTitleColor(buttonTitleColor, forState: .Normal)
    myButton.setTitle(buttonTitle, forState: .Normal)

    // call super initializer
    super.init(frame: frame)

    // add button to self
    addSubview(myButton)

  }

  required init(coder aDecoder: NSCoder) {
    // init stored properties
    buttonTitleColor = UIColor.redColor()
    buttonTitle = "button title"
    buttonFrame = CGRectMake(0, 0, 100, 50)

    myButton = UIButton(frame: buttonFrame)
    myButton.setTitleColor(buttonTitleColor, forState: .Normal)
    myButton.setTitle(buttonTitle, forState: .Normal)

    // call super initializer
    super.init(coder: aDecoder)

    // add button to self
    addSubview(myButton)
  }

  override func layoutSubviews() {
    // refresh button state through attribute inspector
    myButton.setTitleColor(buttonTitleColor, forState: .Normal)
    myButton.setTitle(buttonTitle, forState: .Normal)
  }

}

上图:

从图中可以看到,代码实时渲染到IB中了。

另外,我们在attribute inspector中也可以看到,由指令@IBInspectable声明的属性也出现在了面板中,通过修改这些值可以动态改变界面的效果(需要实现layoutSubviews方法)

具体工程一览:

时间: 2024-07-29 04:03:23

iOS @IBDesignable和@IBInspectable的相关文章

@IBDesignable和@IBInspectable

最近一直在看苹果公司提供的两本swift官方教程电子书,一部是<The Swift Programming Language>,另一部是<Using Swift With Cocoa and Objective-C>.昨天正好看到第二部电子书的"Writing Swift Classes with Objective-C Behavior"这一节,其中讲述了关于实时渲染这一技术.下面是摘抄的其中一段内容: "Live Rendering You can

ios 开发关键字IBInspectable

这个关键字 可以让开发者省去很多事情 把部分界面设置 放在ui设计这里 可以让别人分担 特别是 像我现在所呆的小公司老变样 让他们自己改去 这里只点出一下 有兴趣 自行搜索 版权声明:本文为博主原创文章,未经博主允许不得转载.

iOS开发UI篇—屏幕适配autoResizing autoLayout和sizeClass图文详解

1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基本不用怎么适配布局,所有的ui控件只要相对父控件布局就可以了,没错autoResizing就是一个相对于父控件的布局解决方法:注意:它只能相对父控件布局:***在xcode中可以通过可视化的界面调整也可以通过代码去控制 在用autoResizing的时候需要关闭autoLayout和sizeclas

设计一个 iOS 控件

代码的等级:可编译.可运行.可测试.可读.可维护.可复用 前言 一个控件从外在特征来说,主要是封装这几点: 交互方式 显示样式 数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内:而一个好的控件除了有对外一致的体验之外,还有其内在特征: 灵活性 低耦合 易拓展 易维护 通常特征之间需要做一些取舍,比如灵活性与耦合度,有时候接口越多越能适应各种环境,但是接口越少对外产生的依赖就越少,维护起来也更容易.通常一些前期看起来

如何设计一个 iOS 控件?(iOS 控件完全解析)

前言 一个控件从外在特征来说,主要是封装这几点: 交互方式 显示样式 数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内:而一个好的控件除了有对外一致的体验之外,还有其内在特征: 灵活性 低耦合 易拓展 易维护 通常特征之间需要做一些取舍,比如灵活性与耦合度,有时候接口越多越能适应各种环境,但是接口越少对外产生的依赖就越少,维护起来也更容易.通常一 些前期看起来还不错的代码,往往也会随着时间加深慢慢“成长”,功能的增

如何设计一个 iOS 控件?(iOS 控件完全解析) (转)

前言 一个控件从外在特征来说,主要是封装这几点: 交互方式 显示样式 数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内:而一个好的控件除了有对外一致的体验之外,还有其内在特征: 灵活性 低耦合 易拓展 易维护 通常特征之间需要做一些取舍,比如灵活性与耦合度,有时候接口越多越能适应各种环境,但是接口越少对外产生的依赖就越少,维护起来也更容易.通常一些前期看起来还不错的代码,往往也会随着时间加深慢慢“成长”,功能的增加

深入理解IOS布局和view加载显示

前言 一个控件从外在特征来说,主要是封装这几点: 交互方式 显示样式 数据使用 对外在特征的封装,能让我们在多种环境下达到 PM 对产品的要求,并且提到代码复用率,使维护工作保持在一个相对较小的范围内:而一个好的控件除了有对外一致的体验之外,还有其内在特征: 灵活性 低耦合 易拓展 易维护 通常特征之间需要做一些取舍,比如灵活性与耦合度,有时候接口越多越能适应各种环境,但是接口越少对外产生的依赖就越少,维护起来也更容易.通常一些前期看起来还不错的代码,往往也会随着时间加深慢慢“成长”,功能的增加

关于IB_DESIGNABLE / IBInspectable的那些事

前言 IB_DESIGNABLE / IBInspectable 这两个关键字是在WWDC 2014年”What’s New in Interface Builder”这个Session里面,用Swift讲过一个例子.也是随着Xcode 6 新加入的关键字. 这两个关键字是用在我们自定义View上的,目前暂时只能用在UIView的子类中所以系统自带的原生的那些控件使用这个关键字都没有效果. Live RenderingYou can use two different attributes—@I

ios Swift 特性

特性提供了关于声明和类型的更多信息.在Swift中有两类特性,用于修饰声明的以及用于修饰类型的.例如,required特性,当应用于一个类的指定或便利初始化器声明时,表明它的每个子类都必须实现那个初始化器.再比如noreturn特性,当应用于函数或方法类型时,表明该函数或方法不会返回到它的调用者. 通过以下方式指定一个特性:符号@后面跟特性名,如果包含参数,则把参数带上: @attribute name@attribute name(attribute arguments) 有些声明特性通过接收