2016-04-20 77 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 –

相关问题