什么是用户定义的运行时属性中的关键路径?

j2e*_*nue 12 xcode user-defined-fields interface-builder ios

我继承了一个项目,我对某个键是什么感到困惑.我的问题是,styleName键路径是什么?它是视图的属性吗?我怎样才能找到可用的关键路径?

例如,在我从故事板中选择UILabel后,我检查身份检查器,并在用户定义的运行时属性中,我看到以下内容:

在此输入图像描述

我试过打开main-styles.plist文件但不确定它是如何链接在一起的.

当我点击属性检查器(同时仍然保持故事板中的UILabel突出显示)时,它是这样的:

在此输入图像描述

nhg*_*rif 23

有一个NSKeyValueCoding协议,其中许多对象UIKit符合.

其中一种方法NSKeyValueCodingvalueForKey:(和许多其他相关方法,检查我链接的文档).

通过调用valueForKey:对象,我们可以在运行时访问在接口构建器上设置的属性.

所以,例如,在这个标签上,我可能会这样做:

Objective-C的:

NSString *style = [myLabel valueForKey:@"styleName"];
Run Code Online (Sandbox Code Playgroud)

迅速:

let style = myLabel.valueForKey("styleName")
Run Code Online (Sandbox Code Playgroud)

现在我可以通过Interface Builder获取设置值,在运行时,我可以根据此处设置的值对标签执行某些操作.例如,在这里,我可能会使用特定的"样式名称"以特定方式设计标签.

如果你在项目中搜索valueForKey或者"styleName",你可能会发现这个属性的使用位置以及它正在做什么.


为了跟进我关于属性检查器的问题,从Xcode 6开始,我们可以使用该@IBInspectable属性创建将在Attributes Inspector中显示的属性(如此处所示).考虑这个UIView扩展:

extension UIView {
    @IBInspectable var borderColor : UIColor? {
        set (newValue) {
            self.layer.borderColor = (newValue ?? UIColor.clearColor()).CGColor
        }
        get {
            return UIColor(CGColor: self.layer.borderColor)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我们UIView在故事板中查看属性检查器中的任何(或子类),我们将看到:

在此输入图像描述

我们现在通过属性检查器提供"边框颜色"属性,该属性通常不存在.我指出这个工具的原因是因为每当你通过Attributes Inspector设置其中一个属性时,你设置的值实际上存储为这些"用户定义的运行时属性"之一:

在此输入图像描述

每当从我的应用程序中的XIB加载此视图时,首先发生的事情之一就是我的borderColor属性将设置为我在Interface Builder中选择的这种红色.


Ami*_*a シ 6

下面是可用属性类型和相应属性类型的列表。

 Boolean – BOOL (true/false)
 Number – NSNumber * or any numeric scalar, e.g. NSInteger
 String – NSString 
 Point – CGPoint
 Size – CGSize
 Rect – CGRect
 Range – NSRange
 Color – UIColor 
Run Code Online (Sandbox Code Playgroud)

这里的图像显示如何定义用户定义的运行时属性