如何在 iOS/xcode 中重用颜色和样式?

How to reuse colors and styles in iOS/xcode?

Android、WPF 和我一直使用的大多数平台,都可以在单个文件中重用和 "centralize"ui 资源,例如颜色和样式。

在android中可以这样做:

在 colors.xml 文件中:

<color name="secondary_text_color">#ffcc67</color>

在任何视图中:

<TextView text="some text" textColor="@colors/secondary_text_color" />

iOS中有类似的东西吗?

我不是要在 iOS 中复制 android,但我正在努力理解什么是(如果有的话)ui 应该遵循的重用模式.

我唯一遇到的就是在代码中定义 Theme,然后在后面的代码中重用它,这样对吗?

您可以使用任何单例 class 或 UIColor 扩展来完成此操作。以下是一个示例 UIColor 扩展名。

import Foundation
import UIKit

extension UIColor
{
    class func someColor1() -> UIColor
    {
        return UIColor(red: 123.0/255.0, green: 162.0/255.0, blue: 157.0/255.0, alpha:1.0)
    }

    class func someColor2() -> UIColor
    {
        return UIColor(red: 154.0/255.0, green: 143.0/255.0, blue: 169.0/255.0, alpha:1.0)
    }
}

稍后您可以访问

这样的颜色
textField.textColor = UIColor.someColor2()

编辑: 您也可以对样式执行相同的操作,使用 NSAttributedString

class StyleHelper : NSObject{

    class func getSecondaryTextWithString(textString:String) -> NSAttributedString
    {
        let secondaryTextStyleAttributes: [String : AnyObject] = [
            NSForegroundColorAttributeName: UIColor.greenColor(), NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleDouble.rawValue,NSFontAttributeName: UIFont.systemFontOfSize(14.0)]
        let secondaryTextStyleString = NSAttributedString(string: textString, attributes:secondaryTextStyleAttributes)
        return secondaryTextStyleString
    }
}

当你需要样式的时候,你会调用like

someLabel.attributedText = StyleHelper.getSecondaryTextWithString("SomeText")

添加到 类 的 raki 答案扩展(如 UIColor 或 UIFont)是我见过的最多的,即使您需要稍微多输入一些内容,它也是 iOS 中的等价物。

extension UIFont {
class func myFont() -> UIFont {
    return UIFont(name: "HelveticaNeue", size: 22)!
}

class func otherFont() -> UIFont {
    return UIFont(name: "Arial", size: 22)!
}

}

来自 android 的另一件事可能与 iOS 编程中的字符串文件等效,因为您似乎对重用这些样式感兴趣。对于字符串:

然后填写您要在应用中使用的字符串

"ACTION_CELL_MENU" =                "Menu";

然后在其他地方的代码中

label.text = NSLocalizedString("ACTION_CELL_MENU", comment: "")

很老的问题,但您实际上可以向 Assets.xcassets 添加任何颜色,只需调用资源列表上的上下文菜单,然后 "New Color Set" 就完成了!您可以将其与 Interface Builder 一起使用或以编程方式使用。