Swift 换皮肤工具类
Posted 北冥鱼_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift 换皮肤工具类相关的知识,希望对你有一定的参考价值。
该工具类可设置 UIView 、UIButton、UITableViewCell 的皮肤色。
一、首先,定义 Skin :
import Foundation
import UIKit
struct Skin
let backgroundColor: UIColor
let controlBackground: UIColor?
let controlBorder: UIColor?
let controlTextColor: UIColor?
let tableCellTextColor: UIColor?
let stepperColor: UIColor?
// 几种不同类型的皮肤
static let login = Skin(
backgroundColor: UIColor(named: "canary")!,
controlBackground: UIColor(named: "pink"),
controlBorder: UIColor(named: "controlBorderGray"),
controlTextColor: UIColor(named: "yellow"),
tableCellTextColor: nil,
stepperColor: nil)
static let loginAlert = Skin(
backgroundColor: UIColor(named: "pink")!,
controlBackground: nil,
controlBorder: nil,
controlTextColor: UIColor(named: "yellow"),
tableCellTextColor: nil,
stepperColor: nil)
static let announcements = Skin(
backgroundColor: UIColor(named: "purple")!,
controlBackground: nil,
controlBorder: nil,
controlTextColor: .darkText,
tableCellTextColor: .bizLightGray,
stepperColor: nil)
static let purchaseOrder = Skin(
backgroundColor: .bizCanary,
controlBackground: nil,
controlBorder: nil,
controlTextColor: .darkText,
tableCellTextColor: .darkGray,
stepperColor: .bizPurple)
static let orgChart = Skin(
backgroundColor: .bizYellow,
controlBackground: nil,
controlBorder: nil,
controlTextColor: .darkText,
tableCellTextColor: .darkText,
stepperColor: nil)
二、Styler 工具类
import UIKit
class Styler
static let shared = Styler()
let configuration = AppDelegate.configuration!
func style(
background: UIView? = nil,
buttons: [UIButton]? = nil,
with skin: Skin
)
background.flatMap style(background: $0, skin: skin)
buttons?.forEach style(button: $0, skin: skin)
func style(background: UIView, skin: Skin)
background.backgroundColor = skin.backgroundColor
func style(button: UIButton, skin: Skin)
if let borderColor = skin.controlBorder
// cornerRadius borderWidth 根据需要自己调整
button.layer.cornerRadius = CGFloat(configuration.ui.button.cornerRadius)
button.layer.borderWidth = CGFloat(configuration.ui.button.borderWidth)
button.layer.borderColor = borderColor.cgColor
button.backgroundColor = skin.controlBackground
button.setTitleColor(skin.controlTextColor, for: .normal)
func style(cell: UITableViewCell, with skin: Skin)
cell.backgroundColor = skin.backgroundColor
for view in cell.contentView.subviews
if let label = view as? UILabel
label.textColor = skin.tableCellTextColor
if let textField = view as? UITextField
textField.textColor = skin.tableCellTextColor
if let stepper = view as? UIStepper
stepper.tintColor = skin.tableCellTextColor
stepper.backgroundColor = skin.stepperColor
三、使用方式
在需要设置皮肤的类头部定义
let skin: Skin = .purchaseOrder
- 设置 view 的皮肤:
override func viewDidLoad()
super.viewDidLoad()
Styler.shared.style(background: view, skin: skin)
- 设置 cell 的皮肤:
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
Styler.shared.style(cell: cell, with: skin)
- 设置 buttons 的皮肤:
private func updateSkin()
guard let skin = skin else return
Styler.shared.style(
background: alertView,
buttons: [okButton, secondaryButton],
with: skin)
以上是关于Swift 换皮肤工具类的主要内容,如果未能解决你的问题,请参考以下文章