2016-04-20 91 views
0

我有一個超級瘦的字體。在Photoshop中,我添加了筆劃,使其看起來更有吸引力。當它轉移到iOS我不能添加一個筆畫,除非我使用NSAttributedString。通過使用NSAttributedString,我得到了我的一個UILabels,看看它在photoshop中的樣子,但問題是,在我的應用完成時,我將擁有數百個UILabels。有沒有一種方法,我不必手動將每個UILabel連接到其各自的控制器並逐個設置其屬性文本。任何建議都會有幫助。IOS無論如何要在應用程序中使用NSAttributedString。 Swift

+0

這聽起來像你應該繼承標籤並在初始化器中設置你想要的屬性。 – AdamPro13

+0

我應該怎麼做?我想創建一個UILabel類,並在初始化器中放入屬性?我會將UILabel連接到課程,這是正確的嗎? –

回答

0

基於@ AdamPro13建議,您可以爲您的NSAttributedString協議擴展:

所以,用類似的東西創造NSAttributedStringExtension.swift

protocol NSAttributedStringExtension { 
    static func attributed(string:String, font:UIFont, color:UIColor) -> NSAttributedString 
} 

extension NSAttributedString : NSAttributedStringExtension { 
    class func attributed(string:String, font:UIFont, color:UIColor) -> NSAttributedString { 

     let attrs = [NSFontAttributeName:font, NSForegroundColorAttributeName:color] 
     return NSAttributedString(string: string, attributes: attrs) 
    } 
} 

而且你可以針對不同的標籤幾種不同的功能類型。 然後就申請您的標籤(粗碼)上:

let label:UILabel 
let font:UIFont 
let color:UIColor 
label.attributedText = NSAttributedString.attributed("test", font: font, color: color) 

注:字體和顏色你可以設置你的協議擴展功能

+0

這個答案很好。在AdamPro13和你的答案之間,我想我已經想出了一個解決方案。創建一個類(BaseUILabel類)並將所有UILabel分配給該類。這節省了我將每個UILabel連接到控制器然後調用.attributed函數的麻煩。對於基於表格的標籤,我可以調用擴展名。非常感謝您提供這樣一個有見地的解決方案! –

0

如果你使用故事板,並希望使用UILabels正常,那麼你可以嘗試創建一個UILabel子類,如下所示,並將其作爲自定義類在故事板中使用。這將有效地替換文本與你想要的屬性文本,雖然你不會看到它,直到運行時。

class CustomLabel: UILabel { 
    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     commonInit() 
    } 

    func commonInit() { 
     let attrs = [NSFontAttributeName: UIFont.boldSystemFontOfSize(19), 
        NSForegroundColorAttributeName: UIColor.blueColor()] 
     attributedText = NSAttributedString(string: text!, attributes: attrs) 
    } 
} 
+0

感謝JonLz給你回覆。你的回答類似於AdamPro13所說的。起初我對我應該做什麼感到困惑,但仔細閱讀他的建議後,我想我應該這樣做。謝謝! Aleksey也爲我提供了一個解決方案,以解決所有非靜態的標籤 - 例如cells.textLabels –

相關問題