2016-04-05 30 views
1

我想知道更多细节如何实现文本样式到UILabel。 我想在Storyboard的IBInspectable字段中键入String,获取此值并在样式文件(开关大小写)中查找它。UILabel扩展,用户定义的运行时属性

我试图这样这样做:

  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 
         } 
        } 
    

    }

我称它在viewDidAppear方法作为出口属性:

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

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

当我设法得到它失败的价值。我得到“bad_exc_access”错误,我试图修复它,但我不明白这一行为,并且对apple.developer没有任何说明。我发现只有教程,与cornerRadius,borderColor和这样的工作人员的问题。 我试图用objc_getAssociatedObject(self, "styleNew")替换返回return self.styleNew,但它也没有帮助。

回答

0

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

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

+0

你的代码对我很有帮助,对我来说一切正常,但是如何获得{return“something”},那么如何在不返回它的情况下获得正确的价值呢?可能吗?那么设置这个值呢?其实你在那里做什么只是调用另一种方法来选择风格。对我来说,我无法将getter&setter设置为自己,这很奇怪。 – rudald

相关问题