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

时间:2016-02-03 10:35:58

标签: ios swift user-interface design-patterns code-reuse

Android,WPF以及我一直在使用的大多数平台都有办法在单个文件中重用和“集中”ui资源,如颜色和样式。

在Android中

这样做是可行的:

在colors.xml文件中

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    MainActivity mainActivity=new MainActivity();
    WindowManager wm = (WindowManager) mContext
            .getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int imgSize = 0;
    if (convertView == null) {
        // if it's not recycled, initialize some attributes
        if(position!=0)
        {
            imgSize=200;
        }
        else
        {
           imgSize=size.x;
        }
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(imgSize, 200));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

        imageView.setPadding(8, 8, 8, 8);
    } else {
        imageView = (ImageView) convertView;
    }

    imageView.setImageResource(mThumbIds[position]);
    return imageView;
}

在任何视图中:

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

iOS中有类似的东西吗?

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

我遇到的唯一一件事就是在代码中定义Theme,并在代码中重用它,这是正确的方法吗?

3 个答案:

答案 0 :(得分:12)

您可以使用任何单例类或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
    }
}

当您需要样式时,您将调用

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

答案 1 :(得分:1)

添加到像UIColor或UIFont这样的类的raki答案扩展是我最常见的,即使你必须做更多的输入,它在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编程中的字符串文件,因为您似乎对重用这些样式感兴趣。对于字符串:

You can add a strings file to your project

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

"ACTION_CELL_MENU" =                "Menu";

然后在你的代码中

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

答案 2 :(得分:0)

一个很老的问题,但是实际上您可以向Assets.xcassets添加任何颜色,只需调用资源列表上的上下文菜单,然后单击“新建颜色集”即可完成!您可以将其与Interface Builder一起使用,也可以通过编程方式使用。