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


posted on 2017-04-26 15:17  yjbjingcha  阅读(316)  评论(0编辑  收藏  举报

导航