Comments 3
Есть решения которые позволяют стилизовать даже без написания функций под каждый стиль.
Например в SKStyleKit используется описание стилей в виде JSON файла и в общем случае кода не приходится писать вообще.
Например в SKStyleKit используется описание стилей в виде JSON файла и в общем случае кода не приходится писать вообще.
0
Спасибо за публикацию, подход очень интересный! Сегодня же попробую!
Вы использовали анимированное применение стилей? Поделитесь примером?
Вы использовали анимированное применение стилей? Поделитесь примером?
0
Попробовал ваш подход. Идея понравилась, но… допустим я хочу применить для какого-то лейбла UIViewStyle<UIView> и UIViewStyle<UILabel>. И у меня это не заработало. Вот пример, на который жалуется компилятор:
Поэтому, я предполагаю, что вы объединяли между собой только стили одного типа. Хотя, использование typealias, который вы привели в начале публикации, мог бы справиться с задачей совмещения стилей класса и стилей родителей класса.
В итоге у меня получилось использовать стили вот таким образом:
Где стили, например, обернуты в static функции класса:
var style1: UIViewStyle<UIView>!
var style2: UIViewStyle<UILabel>!
var style3: UIViewStyle = .compose(style1, style2)
Поэтому, я предполагаю, что вы объединяли между собой только стили одного типа. Хотя, использование typealias, который вы привели в начале публикации, мог бы справиться с задачей совмещения стилей класса и стилей родителей класса.
typealias UIViewStyle<T: UIView> = (T)-> Void
В итоге у меня получилось использовать стили вот таким образом:
let view = UILabel()
view.decorator[UIView.backgroundColor(), UILabel.textSubtitle()]
return view
Где стили, например, обернуты в static функции класса:
extension UIView {
static func backgroundColor() -> (UIView) -> () {
return { (view: UIView) -> () in
view.backgroundColor = UIColor.orange
}
}
}
extension UILabel {
static func textNormal() -> (UILabel) -> () {
return { (view: UILabel) -> () in
view.numberOfLines = 1
view.textColor = UIColor.blue
view.textAlignment = .left
view.lineBreakMode = .byTruncatingMiddle
view.font = UIFont.systemFont(ofSize: 16.0)
}
}
}
+1
Sign up to leave a comment.
CSS для Swift: использование стилей для любых подклассов UIView