User Defined Runtime Attributes

ios开发中,User Defined Runtime Attributes的应用

User Defined Runtime Attributes是一个不被看重但功能非常强大的的特性,它能够配置一些你在interface builder 中不能配置的属性。
当你希望在IB中作尽可能多得事情,这个特性能够帮助你编写更加轻量级的viewcontroller。1.如何使用当你使用interface builder是点击任意一个控件,转换到identity Inspector

下面是一些可用的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文件中去匹配对应的本地化字符

配置一个 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 coloershadow color,他们都是CGColorRef类型的,并不能直接在User Defined Runtime Attributes进行配置,但请看解决方案:

为了兼容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```
参考文章http://www.ithao123.cn/content-1780114.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容