UILabel扩展,用户定义的运行时属性

时间:2016-04-05 16:09:41

标签: ios swift uilabel runtime extension-methods

我想知道如何为UILabel实现文本样式的更多细节。 我想在Storyboard的IBInspectable字段中键入String,获取此值并在样式文件(switch case)中查找它。

我试过这样做:

  1. 设置“用户定义的运行时属性”。

    关键路径为样式,

    输入为

    的字符串,

    值为“你好”

    我读过我应该在UILabel类中声明这个属性,所以:

     extension UILabel{
       var style: String? {
           get(){
              return self.style // it always fails
           }
           set(newValue){
              objc_setAssociatedObject(self, "styleNew", newValue,
              objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN) 
              //instead of self.style = newValue 
           }
       }
    

    }

  2. 我在viewDidAppear方法中将其作为Outlet属性调用:

     `print("Style", self.infoLabel.valueForKey("styleNew"))`
    

    以及

     `print("Style", self.infoLabel.styleNew)`
    

    当我试图获得价值时,它失败了。我收到“bad_exc_access”错误,我试图修复它,但我不明白这种行为,并且在apple.developer上并不清楚。我发现只有教程,有关cornerRadius,borderColor和类似工作人员的问题。 我已尝试将return self.styleNew替换为objc_getAssociatedObject(self, "styleNew"),但也没有帮助。

1 个答案:

答案 0 :(得分:0)

这是一个计算属性,你不能在getter中返回它自己。

如果您尝试通过设置样式字符串来设置标签的样式,我建议您保留样式的注册表,并且在设置样式属性时,只需将样式应用于UILabel。我试图实现类似的成功,所以你可以看看here