2016-04-05 27 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

相關問題