refactored to use layoutSubviews

Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
Matt Bruce 2022-10-20 14:06:03 -05:00
parent e53e66b96a
commit 60dbfa9d2b
17 changed files with 177 additions and 176 deletions

View File

@ -22,7 +22,7 @@ open class CollectionView: UICollectionView, ModelHandlerable, ViewProtocol, Res
//--------------------------------------------------
private var initialSetupPerformed = false
open var surface: Surface = .light { didSet { subject.send() }}
open var surface: Surface = .light { didSet { didChange() }}
open var disabled: Bool = false { didSet { isEnabled = !disabled } }
@ -33,7 +33,7 @@ open class CollectionView: UICollectionView, ModelHandlerable, ViewProtocol, Res
disabled = !newValue
}
isUserInteractionEnabled = isEnabled
subject.send()
didChange()
}
}
@ -67,18 +67,20 @@ open class CollectionView: UICollectionView, ModelHandlerable, ViewProtocol, Res
open func initialSetup() {
if !initialSetupPerformed {
initialSetupPerformed = true
setupUpdateView()
setup()
updateView()
}
}
open override func layoutSubviews() {
super.layoutSubviews()
updateView()
}
//--------------------------------------------------
// MARK: - Overrides
//--------------------------------------------------
open func updateView() {
fatalError("Implement updateView")
}
open func updateView() {}
open func reset() {
backgroundColor = .clear

View File

@ -8,6 +8,6 @@
import Foundation
public struct Constants {
public static let ModelStateDebounce = 0.02
public static let ModelStateDebounce = 0.0 //.001
public static let PaddingOne = 10.0
}

View File

@ -17,16 +17,18 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
//--------------------------------------------------
public var subject = PassthroughSubject<Void, Never>()
public var subscribers = Set<AnyCancellable>()
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
private var initialSetupPerformed = false
open var surface: Surface = .light { didSet { subject.send() }}
open var surface: Surface = .light { didSet { didChange() } }
open var disabled: Bool = false { didSet { isEnabled = !disabled } }
open override var isSelected: Bool { didSet { didChange() } }
open override var isEnabled: Bool {
get { !disabled }
set {
@ -34,7 +36,7 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
disabled = !newValue
}
isUserInteractionEnabled = isEnabled
subject.send()
didChange()
}
}
@ -63,7 +65,6 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
open func initialSetup() {
if !initialSetupPerformed {
initialSetupPerformed = true
setupUpdateView()
setup()
updateView()
}
@ -79,10 +80,13 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
//--------------------------------------------------
// MARK: - Overrides
//--------------------------------------------------
open func updateView() {
fatalError("Implement updateView")
open override func layoutSubviews() {
super.layoutSubviews()
updateView()
}
open func updateView() {}
open func reset() {
backgroundColor = .clear
surface = .light

View File

@ -17,13 +17,13 @@ open class View: UIView, ModelHandlerable, ViewProtocol, Resettable {
//--------------------------------------------------
public var subject = PassthroughSubject<Void, Never>()
public var subscribers = Set<AnyCancellable>()
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
private var initialSetupPerformed = false
open var surface: Surface = .light { didSet { subject.send() }}
open var surface: Surface = .light { didSet { didChange() }}
open var disabled: Bool = false { didSet { isEnabled = !disabled } }
@ -34,7 +34,7 @@ open class View: UIView, ModelHandlerable, ViewProtocol, Resettable {
disabled = !newValue
}
isUserInteractionEnabled = isEnabled
subject.send()
didChange()
}
}
@ -63,18 +63,19 @@ open class View: UIView, ModelHandlerable, ViewProtocol, Resettable {
open func initialSetup() {
if !initialSetupPerformed {
initialSetupPerformed = true
setupUpdateView()
setup()
updateView()
}
}
open override func layoutSubviews() {
super.layoutSubviews()
updateView()
}
//--------------------------------------------------
// MARK: - Overrides
//--------------------------------------------------
open func updateView() {
fatalError("Implement updateView")
}
open func updateView() {}
open func reset() {
backgroundColor = .clear

View File

@ -20,25 +20,25 @@ open class BadgeBase: View, Accessable {
//--------------------------------------------------
// MARK: - Public Properties
//--------------------------------------------------
open var fillColor: BadgeFillColor = .red { didSet { subject.send() }}
open var fillColor: BadgeFillColor = .red { didSet { didChange() }}
open var text: String = "" { didSet { subject.send() }}
open var text: String = "" { didSet { didChange() }}
open var maxWidth: CGFloat? { didSet { subject.send() }}
open var maxWidth: CGFloat? { didSet { didChange() }}
open var numberOfLines: Int = 1 { didSet { subject.send() }}
open var numberOfLines: Int = 1 { didSet { didChange() }}
open var accessibilityHintEnabled: String? { didSet { subject.send() }}
open var accessibilityHintEnabled: String? { didSet { didChange() }}
open var accessibilityHintDisabled: String? { didSet { subject.send() }}
open var accessibilityHintDisabled: String? { didSet { didChange() }}
open var accessibilityValueEnabled: String? { didSet { subject.send() }}
open var accessibilityValueEnabled: String? { didSet { didChange() }}
open var accessibilityValueDisabled: String? { didSet { subject.send() }}
open var accessibilityValueDisabled: String? { didSet { didChange() }}
open var accessibilityLabelEnabled: String? { didSet { subject.send() }}
open var accessibilityLabelEnabled: String? { didSet { didChange() }}
open var accessibilityLabelDisabled: String? { didSet { subject.send() }}
open var accessibilityLabelDisabled: String? { didSet { didChange() }}
//--------------------------------------------------
// MARK: - Constraints

View File

@ -29,15 +29,15 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
open var text: String? { didSet { subject.send() }}
open var text: String? { didSet { didChange() } }
open var use: Use = .primary { didSet { subject.send() }}
open var use: Use = .primary { didSet { didChange() }}
open var size: ButtonSize = .large { didSet { subject.send() }}
open var size: ButtonSize = .large { didSet { didChange() }}
open var width: CGFloat? { didSet { subject.send() }}
open var width: CGFloat? { didSet { didChange() }}
open var surface: Surface = .light { didSet { subject.send() }}
open var surface: Surface = .light { didSet { didChange() }}
open var disabled: Bool = false { didSet { isEnabled = !disabled } }
@ -48,7 +48,7 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
disabled = !newValue
}
isUserInteractionEnabled = isEnabled
subject.send()
didChange()
}
}
@ -118,9 +118,7 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
translatesAutoresizingMaskIntoConstraints = false
accessibilityCustomActions = []
accessibilityTraits = .staticText
setupUpdateView()
setup()
updateView()
}
open func setup() {
@ -146,6 +144,11 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
accessibilityCustomActions = []
accessibilityTraits = .staticText
}
open override func layoutSubviews() {
super.layoutSubviews()
updateView()
}
//--------------------------------------------------
// MARK: - Overrides
@ -162,11 +165,7 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
let font = size == .large ? TypographicalStyle.BoldBodyLarge.font : TypographicalStyle.BoldBodySmall.font
let edgeInsets = size.edgeInsets
if let text = text {
setTitle(text, for: .normal)
} else {
setTitle("No ViewModel Text", for: .normal)
}
setTitle(text ?? "No Text", for: .normal)
titleLabel?.font = font
backgroundColor = bgColor
setTitleColor(titleColor, for: .normal)
@ -187,7 +186,7 @@ open class Button: UIButton, ModelHandlerable, ViewProtocol, Resettable, Useable
minWidthConstraint?.isActive = true
}
}
//--------------------------------------------------
// MARK: - PRIVATE
//--------------------------------------------------

View File

@ -91,41 +91,41 @@ open class CheckboxBase: Control, Accessable, BinaryColorable, Errorable {
}()
//can't bind to @Proxy
open override var isSelected: Bool { didSet { subject.send() }}
open override var isSelected: Bool { didSet { didChange() }}
open var labelText: String? { didSet { subject.send() }}
open var labelText: String? { didSet { didChange() }}
open var labelTextAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
open var labelTextAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
open var childText: String? { didSet { subject.send() }}
open var childText: String? { didSet { didChange() }}
open var childTextAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
open var childTextAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
open var showError: Bool = false { didSet { subject.send() }}
open var showError: Bool = false { didSet { didChange() }}
open var errorText: String? { didSet { subject.send() }}
open var errorText: String? { didSet { didChange() }}
open var inputId: String? { didSet { subject.send() }}
open var inputId: String? { didSet { didChange() }}
open var value: AnyHashable? { didSet { subject.send() }}
open var value: AnyHashable? { didSet { didChange() }}
open var dataAnalyticsTrack: String? { didSet { subject.send() }}
open var dataAnalyticsTrack: String? { didSet { didChange() }}
open var dataClickStream: String? { didSet { subject.send() }}
open var dataClickStream: String? { didSet { didChange() }}
open var dataTrack: String? { didSet { subject.send() }}
open var dataTrack: String? { didSet { didChange() }}
open var accessibilityHintEnabled: String? { didSet { subject.send() }}
open var accessibilityHintEnabled: String? { didSet { didChange() }}
open var accessibilityHintDisabled: String? { didSet { subject.send() }}
open var accessibilityHintDisabled: String? { didSet { didChange() }}
open var accessibilityValueEnabled: String? { didSet { subject.send() }}
open var accessibilityValueEnabled: String? { didSet { didChange() }}
open var accessibilityValueDisabled: String? { didSet { subject.send() }}
open var accessibilityValueDisabled: String? { didSet { didChange() }}
open var accessibilityLabelEnabled: String? { didSet { subject.send() }}
open var accessibilityLabelEnabled: String? { didSet { didChange() }}
open var accessibilityLabelDisabled: String? { didSet { subject.send() }}
open var accessibilityLabelDisabled: String? { didSet { didChange() }}
private var labelModel: DefaultLabelModel? {
guard let labelText = labelText else { return nil }
@ -289,8 +289,6 @@ open class CheckboxBase: Control, Accessable, BinaryColorable, Errorable {
setAccessibilityHint()
setAccessibilityValue(isSelected)
setAccessibilityLabel(isSelected)
setNeedsLayout()
layoutIfNeeded()
}

View File

@ -28,6 +28,11 @@ public class CheckboxGroupBase<ModelHandlerType: CheckboxBase>: SelectorGroupHan
didSet {
for selector in selectorViews {
if !mainStackView.arrangedSubviews.contains(selector) {
selector
.publisher(for: .touchUpInside)
.sink { [weak self] handler in
self?.didSelect(handler)
}.store(in: &subscribers)
mainStackView.addArrangedSubview(selector)
}
}

View File

@ -19,19 +19,20 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
//--------------------------------------------------
public var subject = PassthroughSubject<Void, Never>()
public var subscribers = Set<AnyCancellable>()
public var hasChanged: Bool = false
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
open var surface: Surface = .light { didSet { subject.send() }}
open var surface: Surface = .light { didSet { didChange() }}
open var disabled: Bool = false { didSet { isEnabled = !disabled } }
open var attributes: [any LabelAttributeModel]? { didSet { subject.send() }}
open var attributes: [any LabelAttributeModel]? { didSet { didChange() }}
open var typograpicalStyle: TypographicalStyle = .defaultStyle { didSet { subject.send() }}
open var typograpicalStyle: TypographicalStyle = .defaultStyle { didSet { didChange() }}
open var textPosition: TextPosition = .left { didSet { subject.send() }}
open var textPosition: TextPosition = .left { didSet { didChange() }}
open override var isEnabled: Bool {
get { !disabled }
@ -40,13 +41,13 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
disabled = !newValue
}
isUserInteractionEnabled = isEnabled
subject.send()
didChange()
}
}
override open var text: String? {
didSet {
subject.send()
didChange()
}
}
@ -88,9 +89,7 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
translatesAutoresizingMaskIntoConstraints = false
accessibilityCustomActions = []
accessibilityTraits = .staticText
setupUpdateView()
setup()
updateView()
}
open func setup() {}
@ -107,10 +106,15 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
accessibilityTraits = .staticText
numberOfLines = 0
}
//--------------------------------------------------
// MARK: - Overrides
//--------------------------------------------------
open override func layoutSubviews() {
super.layoutSubviews()
updateView()
}
open func updateView() {
textAlignment = textPosition.textAlignment
textColor = textColorConfiguration.getColor(self)

View File

@ -82,41 +82,41 @@ open class RadioBoxBase: Control, BinaryColorable, Accessable {
}
}()
open var text: String = "Default Text" { didSet { subject.send() }}
open var text: String = "Default Text" { didSet { didChange() }}
open var textAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
open var textAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
open var subText: String? { didSet { subject.send() }}
open var subText: String? { didSet { didChange() }}
open var subTextAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
open var subTextAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
open var subTextRight: String? { didSet { subject.send() }}
open var subTextRight: String? { didSet { didChange() }}
open var subTextRightAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
open var subTextRightAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
open var strikethrough: Bool = false { didSet { subject.send() }}
open var strikethrough: Bool = false { didSet { didChange() }}
open var inputId: String? { didSet { subject.send() }}
open var inputId: String? { didSet { didChange() }}
open var value: AnyHashable? { didSet { subject.send() }}
open var value: AnyHashable? { didSet { didChange() }}
open var dataAnalyticsTrack: String? { didSet { subject.send() }}
open var dataAnalyticsTrack: String? { didSet { didChange() }}
open var dataClickStream: String? { didSet { subject.send() }}
open var dataClickStream: String? { didSet { didChange() }}
open var dataTrack: String? { didSet { subject.send() }}
open var dataTrack: String? { didSet { didChange() }}
open var accessibilityHintEnabled: String? { didSet { subject.send() }}
open var accessibilityHintEnabled: String? { didSet { didChange() }}
open var accessibilityHintDisabled: String? { didSet { subject.send() }}
open var accessibilityHintDisabled: String? { didSet { didChange() }}
open var accessibilityValueEnabled: String? { didSet { subject.send() }}
open var accessibilityValueEnabled: String? { didSet { didChange() }}
open var accessibilityValueDisabled: String? { didSet { subject.send() }}
open var accessibilityValueDisabled: String? { didSet { didChange() }}
open var accessibilityLabelEnabled: String? { didSet { subject.send() }}
open var accessibilityLabelEnabled: String? { didSet { didChange() }}
open var accessibilityLabelDisabled: String? { didSet { subject.send() }}
open var accessibilityLabelDisabled: String? { didSet { didChange() }}
//functions
//--------------------------------------------------
@ -222,8 +222,6 @@ open class RadioBoxBase: Control, BinaryColorable, Accessable {
setAccessibilityHint()
setAccessibilityValue(isSelected)
setAccessibilityLabel(isSelected)
setNeedsLayout()
layoutIfNeeded()
}

View File

@ -27,6 +27,11 @@ public class RadioBoxGroupBase<ModelHandlerType: RadioBoxBase>: SelectorGroupSel
didSet {
for selector in selectorViews {
if !mainStackView.arrangedSubviews.contains(selector) {
selector
.publisher(for: .touchUpInside)
.sink { [weak self] handler in
self?.didSelect(handler)
}.store(in: &subscribers)
mainStackView.addArrangedSubview(selector)
}
}

View File

@ -98,39 +98,39 @@ open class RadioButtonBase: Control, Accessable, BinaryColorable, Errorable {
}
}()
open var labelText: String? { didSet { subject.send() }}
open var labelText: String? { didSet { didChange() }}
open var labelTextAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
open var labelTextAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
open var childText: String? { didSet { subject.send() }}
open var childText: String? { didSet { didChange() }}
open var childTextAttributes: [any LabelAttributeModel]? { didSet { subject.send() }}
open var childTextAttributes: [any LabelAttributeModel]? { didSet { didChange() }}
open var showError: Bool = false { didSet { subject.send() }}
open var showError: Bool = false { didSet { didChange() }}
open var errorText: String? { didSet { subject.send() }}
open var errorText: String? { didSet { didChange() }}
open var inputId: String? { didSet { subject.send() }}
open var inputId: String? { didSet { didChange() }}
open var value: AnyHashable? { didSet { subject.send() }}
open var value: AnyHashable? { didSet { didChange() }}
open var dataAnalyticsTrack: String? { didSet { subject.send() }}
open var dataAnalyticsTrack: String? { didSet { didChange() }}
open var dataClickStream: String? { didSet { subject.send() }}
open var dataClickStream: String? { didSet { didChange() }}
open var dataTrack: String? { didSet { subject.send() }}
open var dataTrack: String? { didSet { didChange() }}
open var accessibilityHintEnabled: String? { didSet { subject.send() }}
open var accessibilityHintEnabled: String? { didSet { didChange() }}
open var accessibilityHintDisabled: String? { didSet { subject.send() }}
open var accessibilityHintDisabled: String? { didSet { didChange() }}
open var accessibilityValueEnabled: String? { didSet { subject.send() }}
open var accessibilityValueEnabled: String? { didSet { didChange() }}
open var accessibilityValueDisabled: String? { didSet { subject.send() }}
open var accessibilityValueDisabled: String? { didSet { didChange() }}
open var accessibilityLabelEnabled: String? { didSet { subject.send() }}
open var accessibilityLabelEnabled: String? { didSet { didChange() }}
open var accessibilityLabelDisabled: String? { didSet { subject.send() }}
open var accessibilityLabelDisabled: String? { didSet { didChange() }}
//--------------------------------------------------
// MARK: - Constraints
@ -262,8 +262,6 @@ open class RadioButtonBase: Control, Accessable, BinaryColorable, Errorable {
setAccessibilityHint()
setAccessibilityValue(isSelected)
setAccessibilityLabel(isSelected)
setNeedsLayout()
layoutIfNeeded()
}
//--------------------------------------------------

View File

@ -11,8 +11,7 @@ import UIKit
public class RadioButtonGroup: RadioButtonGroupBase<RadioButton> {
public override func didSelect(_ selectedControl: RadioButton) {
let oldSelectedControl = selectorViews.filter { $0.isSelected == true }.first
oldSelectedControl?.toggle()
selectedHandler?.toggle()
selectedControl.toggle()
if showError {
showError = false
@ -30,6 +29,11 @@ public class RadioButtonGroupBase<ModelHandlerType: RadioButtonBase>: SelectorGr
didSet {
for selector in selectorViews {
if !mainStackView.arrangedSubviews.contains(selector) {
selector
.publisher(for: .touchUpInside)
.sink { [weak self] handler in
self?.didSelect(handler)
}.store(in: &subscribers)
mainStackView.addArrangedSubview(selector)
}
}
@ -41,7 +45,7 @@ public class RadioButtonGroupBase<ModelHandlerType: RadioButtonBase>: SelectorGr
get { _showError }
set {
var newShowError = newValue
if selectedModelHandler != nil, newShowError {
if selectedHandler != nil, newShowError {
newShowError = false
}
selectorViews.forEach { handler in
@ -79,14 +83,4 @@ public class RadioButtonGroupBase<ModelHandlerType: RadioButtonBase>: SelectorGr
mainStackView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
mainStackView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
}
public var selectedModelHandler: ModelHandlerType? {
if let index = selectorViews.firstIndex(where: { element in
return element.isSelected == true
}) {
return selectorViews[index]
} else {
return nil
}
}
}

View File

@ -54,37 +54,37 @@ open class RadioSwatchBase: Control, Accessable, DataTrackable, BinaryColorable
}
}()
open var fillImage: UIImage? { didSet { subject.send() }}
open var fillImage: UIImage? { didSet { didChange() }}
open var text: String = "" { didSet { subject.send() }}
open var text: String = "" { didSet { didChange() }}
open var primaryColor: UIColor? { didSet { subject.send() }}
open var primaryColor: UIColor? { didSet { didChange() }}
open var secondaryColor: UIColor? { didSet { subject.send() }}
open var secondaryColor: UIColor? { didSet { didChange() }}
open var strikethrough: Bool = false { didSet { subject.send() }}
open var strikethrough: Bool = false { didSet { didChange() }}
open var inputId: String? { didSet { subject.send() }}
open var inputId: String? { didSet { didChange() }}
open var value: AnyHashable? { didSet { subject.send() }}
open var value: AnyHashable? { didSet { didChange() }}
open var dataAnalyticsTrack: String? { didSet { subject.send() }}
open var dataAnalyticsTrack: String? { didSet { didChange() }}
open var dataClickStream: String? { didSet { subject.send() }}
open var dataClickStream: String? { didSet { didChange() }}
open var dataTrack: String? { didSet { subject.send() }}
open var dataTrack: String? { didSet { didChange() }}
open var accessibilityHintEnabled: String? { didSet { subject.send() }}
open var accessibilityHintEnabled: String? { didSet { didChange() }}
open var accessibilityHintDisabled: String? { didSet { subject.send() }}
open var accessibilityHintDisabled: String? { didSet { didChange() }}
open var accessibilityValueEnabled: String? { didSet { subject.send() }}
open var accessibilityValueEnabled: String? { didSet { didChange() }}
open var accessibilityValueDisabled: String? { didSet { subject.send() }}
open var accessibilityValueDisabled: String? { didSet { didChange() }}
open var accessibilityLabelEnabled: String? { didSet { subject.send() }}
open var accessibilityLabelEnabled: String? { didSet { didChange() }}
open var accessibilityLabelDisabled: String? { didSet { subject.send() }}
open var accessibilityLabelDisabled: String? { didSet { didChange() }}
//functions
//--------------------------------------------------
@ -143,8 +143,6 @@ open class RadioSwatchBase: Control, Accessable, DataTrackable, BinaryColorable
setAccessibilityHint()
setAccessibilityValue(isSelected)
setAccessibilityLabel(isSelected)
setNeedsLayout()
layoutIfNeeded()
}
//--------------------------------------------------

View File

@ -137,7 +137,6 @@ public class RadioSwatchGroupBase<ModelHandlerType: RadioSwatchBase>: SelectorGr
label.surface = surface
label.disabled = disabled
collectionView.reloadData()
setNeedsLayout()
}
private func updateSelectors() {

View File

@ -120,41 +120,41 @@ open class ToggleBase: Control, Accessable, DataTrackable, BinaryColorable {
//--------------------------------------------------
// MARK: - Public Properties
//--------------------------------------------------
open var isOn: Bool = false { didSet { subject.send() }}
open var isOn: Bool = false { didSet { didChange() }}
open var showText: Bool = false { didSet { subject.send() }}
open var showText: Bool = false { didSet { didChange() }}
open var onText: String = "On" { didSet { subject.send() }}
open var onText: String = "On" { didSet { didChange() }}
open var offText: String = "Off" { didSet { subject.send() }}
open var offText: String = "Off" { didSet { didChange() }}
open var textSize: ToggleTextSize = .small { didSet { subject.send() }}
open var textSize: ToggleTextSize = .small { didSet { didChange() }}
open var textWeight: ToggleTextWeight = .regular { didSet { subject.send() }}
open var textWeight: ToggleTextWeight = .regular { didSet { didChange() }}
open var textPosition: ToggleTextPosition = .left { didSet { subject.send() }}
open var textPosition: ToggleTextPosition = .left { didSet { didChange() }}
open var inputId: String? { didSet { subject.send() }}
open var inputId: String? { didSet { didChange() }}
open var value: AnyHashable? { didSet { subject.send() }}
open var value: AnyHashable? { didSet { didChange() }}
open var dataAnalyticsTrack: String? { didSet { subject.send() }}
open var dataAnalyticsTrack: String? { didSet { didChange() }}
open var dataClickStream: String? { didSet { subject.send() }}
open var dataClickStream: String? { didSet { didChange() }}
open var dataTrack: String? { didSet { subject.send() }}
open var dataTrack: String? { didSet { didChange() }}
open var accessibilityHintEnabled: String? { didSet { subject.send() }}
open var accessibilityHintEnabled: String? { didSet { didChange() }}
open var accessibilityHintDisabled: String? { didSet { subject.send() }}
open var accessibilityHintDisabled: String? { didSet { didChange() }}
open var accessibilityValueEnabled: String? { didSet { subject.send() }}
open var accessibilityValueEnabled: String? { didSet { didChange() }}
open var accessibilityValueDisabled: String? { didSet { subject.send() }}
open var accessibilityValueDisabled: String? { didSet { didChange() }}
open var accessibilityLabelEnabled: String? { didSet { subject.send() }}
open var accessibilityLabelEnabled: String? { didSet { didChange() }}
open var accessibilityLabelDisabled: String? { didSet { subject.send() }}
open var accessibilityLabelDisabled: String? { didSet { didChange() }}
//--------------------------------------------------
// MARK: - Constraints
@ -314,7 +314,5 @@ open class ToggleBase: Control, Accessable, DataTrackable, BinaryColorable {
setAccessibilityValue(isOn)
setAccessibilityLabel(isOn)
backgroundColor = surface.color
setNeedsLayout()
layoutIfNeeded()
}
}

View File

@ -16,16 +16,7 @@ public protocol ModelHandlerable: AnyObject, Initable, Disabling, Surfaceable {
}
extension ModelHandlerable {
public func setupUpdateView() {
handlerPublisher()
.subscribe(on: RunLoop.main)
.sink { [weak self] _ in
self?.updateView()
}
.store(in: &subscribers)
}
public func handlerPublisher() -> AnyPublisher<Void, Never> {
subject
.eraseToAnyPublisher()
@ -33,3 +24,10 @@ extension ModelHandlerable {
.eraseToAnyPublisher()
}
}
extension ModelHandlerable where Self: UIView {
public func didChange() {
subject.send()
setNeedsLayout()
}
}