User Defined Runtime Attributes

User Defined Runtime Attributes 是一个不被看重但功能非常强大的的特性,它能够配置一些你在interface builder 中不能配置的属性。当你希望在IB中作尽可能多得事情,这个特性能够帮助你编写更加轻量级的viewcontroller。

1.如何使用

当你使用interface builder是点击任意一个控件,转换到identity Inspector 
图 1

2属性类型

下面是一些可用的Attribute Types与其相对应的数据类型
Boolean – BOOL
Number –
 NSNumber * or any numeric scalar, e.g. NSInteger
String – NSString *
Point  – CGPoint
Size  – CGSize
Rect – CGRect
Range –
   NSRange
Color – UIColor *
这里还有下面一些特殊的类型:
Nil- 就是设置这个属性为nil
Localized String - 一个在locale文件当中的键值,它会在你的 strings 文件中去匹配对应的本地化字符

demo

配置一个 view 下面的CALayer 的属性,一般我们都是在viewController里的viewDidLoad里写代码进行配置,现在如果你要设置
layer.borderWidth 和 layer.cornerRadius 你只需要如下所示:


编译运行如下:

如果说你要配置一个自定义的控件,你就可以在User Defined Runtime Attributes里配置你的自定义的属性了 如 你的自定义的Button 自定义了一个叫name的属性那可以

如果你要在代码中获取你的自定义属性,你就可以
 id value = [sender valueForKey:@"name"];

Converting From Other Types

只要相应的attribute type代表的时同样的数据类型,那么他们就可以相互替换使用。例如:Point和Size他们地下其实都是同样的结构体{float a,float b}。
但是除了上述几种attribute type,你还可以使用其他的IB不支持数据类型吗?例如我要配置CALayer的 border coloer 和 shadow color,他们都是CGColorRef类型的,并不能直接在User Defined Runtime Attributes进行配置,但请看解决方案:
图5

为了兼容CALayer 的KVC ,你得给CALayer增加一个分类
@implementation CALayer (Additions)

- (void)setBorderColorFromUIColor:(UIColor *)color
{
  self.borderColor = color.CGColor;
}

@end
Convert From String

这经常从NSString中转换成你所要的类型,例如 配置一个 UIEdgeInsets类型的属性,这个不能够被运行时属性支持,但可以考虑如下方案

 

@implementation UIScrollView (Additions)

- (void)setContentInsetFromString:(NSString *)contentInsetString
{
  self.contentInset = UIEdgeInsetsFromString(contentInsetString);
}

@end

添加在layer已layer开头,自己的属性直接添加。

时间: 2024-09-14 01:52:03

User Defined Runtime Attributes的相关文章

Swift:超炫的View Controller切换动画

匿名社交应用Secret的开发者开发了一款叫做Ping的应用,用户可以他们感兴趣的话题的推送. Ping有一个很炫的东西,就是主界面和之间切换的动画做的非常的好.每次看到一个非常炫的动画,都不由得会想:"这个东西我要不要自己实现以下".哈哈~~~ 这个教程里,你会学到如何用Swift实现这样的很酷的动画.你会学到如何使用shape layer,遮罩和使用UIViewControllerAnimnatedTransitioning协议和UIPercentDrivenInteractive

[转] iOS 动画库 Pop 和 Canvas 各自的优势和劣势是什么?

iOS 动画库 Pop 和 Canvas 各自的优势和劣势是什么? http://www.zhihu.com/question/23654895/answer/25541037 拿 Canvas 来和 Pop 比其实不大合适,虽然两者都自称「动画库」,但是「库」这个词的含义有所区别.本质上 Canvas 是一个「动画合集」而 Pop 是一个「动画引擎」. 先说 Canvas.Canvas 的目的是「Animate in Xcode Without Code」.开发者可以通过在 Storyboar

ios-IOS UILabel cornerRadius

问题描述 IOS UILabel cornerRadius 各位大神,你们好. 我现在想在uilabel上添加圆角,方法是在User Defined Runtime Attributes添加key path如下图所示: 但是实践证明此法行不通,因为我运行以后发现只有这个属性行不通,我不知道为啥? 我尝试在代码中用代码写一个label然后设置圆角,发现此法可行.但是如果是outlet的label属性,它的layer.cornerRadius也不好使. 跪求大神指点. UILabel layer.c

可视化(sb)国际化

在之前悠游宝的一个项目中也做过国际化,当时是很据.string文件生成然后通知切换,今天看到了网上一篇可视化国际化的文章,在这里做下记录 环境 系统环境: iOS7 - iOS9 开发环境: Swift2 & Xcode7 DEMO: LocalDemo 这个Demo的功能主要是切换语言后相应的界面文字&图片以及搜索引擎都会随语言变化.我们会围绕这个DEMO进行讲解,读者可以先下载这个Demo运行看下效果再往下 iOS国际化原理分析 国际化其实都大同小异,其核心思想就是为每种语言单独定义一

【iOS】屏幕适配之NSLayoutConstraint

import Foundation class NSLayoutConstraintEx: NSLayoutConstraint {     @IBInspectable     var ipad: CGFloat = 0 {         didSet {             if DeviceUtils.isIPad() {                 constant = ipad             }         }     }     @IBInspectable

Mapping High-Level Constructs to LLVM IR

原文地址:http://llvm.lyngvig.org/Articles/Mapping-High-Level-Constructs-to-LLVM-IR Mapping High-Level Constructs to LLVM IR Table of Contents Introduction A Quick Primer Some Useful LLVM Tools Mapping Basic Constructs to LLVM IR Global Variables Local Va

WWDC 2014 Session笔记 - 可视化开发,IB 的新时代

本文是我的 WWDC 2014 笔记 中的一篇,涉及的 Session 有 What's New in Xcode 6 What's New in Interface Builder 如果说在 WWDC 14 之前 Interface Builder (IB) 还是可选项的话,我相信在此之后 IB 已经是毫无疑问的 iOS 开发标配了,纯代码界面可以说已经渐行渐远,可以逐渐离开我们的视线了. 一言蔽之,就是 Apple 在催促大家使用 IB,特别是 Storyboard 做为界面开发的唯一选择这

如何在storyboard里设置view的圆角、边框、颜色等属性

问题描述 如何在storyboard里设置view的圆角.边框.颜色等属性 如何在storyboard里设置view的圆角.边框.颜色等属性? 解决方案 user efined runtime attributes中添加keypath属性,例如layer.cirnerRadius

[翻译] Canvas 不用写代码的动画

Canvas 不用写代码的动画 https://github.com/CanvasPod/Canvas Canvas is a project to simplify iOS development for both designers and developers. It had been difficult for designers to get hands on building the product with the lack of objective-c and Xcode exp