ResourcePackage/Sources/UIExtensions.swift

91 lines
3.0 KiB
Swift

//
// UIExtensions.swift
//
// Created by Alfred Gao on 2017/1/6.
//
//
// This is using package as theme and providing extensions for UIClasses
#if os(iOS)
import UIKit
import TextFormater
extension UIButton {
///
///
/// Config UIButton with theme
///
/// - parameter reader: ResourcePackageReader which includes the theme
/// - parameter key: key for the UIView
/// - parameter formater: TextFormater for texts, `nil` will use theme default setting
public func loadTheme(from reader: ResourcePackageReader, key: String, with formater: TextFormater? = nil) {
let textFormater = formater ?? reader.themeTextFormater
self.layoutIfNeeded()
let _width = self.bounds.size.width
let _height = self.bounds.size.height
for (_sname, _state) in [
(key, UIControlState.normal),
(key + ".disabled", UIControlState.disabled),
(key + ".highlighted", UIControlState.highlighted),
(key + ".selected", UIControlState.selected),
(key + ".focused", UIControlState.focused),
] {
setAttributedTitle(textFormater.format(reader.getString(_sname + ".title"), imgWidth: _width, imgHeight: _height), for: _state)
setImage(reader.getImage(_sname + ".image"), for: _state)
setBackgroundImage(reader.getImage(_sname + ".bgimg"), for: _state)
}
}
}
extension UILabel {
///
///
/// Config UILabel text with theme
///
/// - parameter reader: ResourcePackageReader which includes the theme
/// - parameter key: key for the UIView
/// - parameter formater: TextFormater for texts, `nil` will use theme default setting
public func setText(from reader: ResourcePackageReader, key: String, with formater: TextFormater? = nil) {
let textFormater = formater ?? reader.themeTextFormater
self.layoutIfNeeded()
let _width = self.bounds.size.width
let _height = self.bounds.size.height
attributedText = textFormater.format(reader.getString(key), imgWidth: _width, imgHeight: _height)
}
}
extension UIImageView {
///
///
/// Config UILabel text with theme
///
/// - parameter reader: ResourcePackageReader which includes the theme
/// - parameter key: key for the UIView
public func setImage(from reader: ResourcePackageReader, key: String) {
image = reader.getImage(key)
highlightedImage = reader.getImage(key + ".highlighted")
}
}
#endif