如何在 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 一起使用或以编程方式使用。
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 一起使用或以编程方式使用。