From 60dbfa9d2b546d7bc6c014ded5d340c669434d80 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 20 Oct 2022 14:06:03 -0500 Subject: [PATCH] refactored to use layoutSubviews Signed-off-by: Matt Bruce --- VDS/Classes/CollectionView.swift | 14 ++++--- VDS/Classes/Constants.swift | 2 +- VDS/Classes/Control.swift | 16 +++++--- VDS/Classes/View.swift | 17 +++++---- VDS/Components/Badge/Badge.swift | 20 +++++----- VDS/Components/Button/Button.swift | 27 +++++++------ VDS/Components/Checkbox/Checkbox.swift | 38 +++++++++---------- VDS/Components/Checkbox/CheckboxGroup.swift | 5 +++ VDS/Components/Label/Label.swift | 24 +++++++----- VDS/Components/RadioBox/RadioBox.swift | 38 +++++++++---------- VDS/Components/RadioBox/RadioBoxGroup.swift | 5 +++ VDS/Components/RadioButton/RadioButton.swift | 36 +++++++++--------- .../RadioButton/RadioButtonGroup.swift | 20 ++++------ VDS/Components/RadioSwatch/RadioSwatch.swift | 34 ++++++++--------- .../RadioSwatch/RadioSwatchGroup.swift | 1 - VDS/Components/Toggle/Toggle.swift | 38 +++++++++---------- VDS/Protocols/ModelHandlerable.swift | 18 ++++----- 17 files changed, 177 insertions(+), 176 deletions(-) diff --git a/VDS/Classes/CollectionView.swift b/VDS/Classes/CollectionView.swift index f9500765..e279c41c 100644 --- a/VDS/Classes/CollectionView.swift +++ b/VDS/Classes/CollectionView.swift @@ -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 diff --git a/VDS/Classes/Constants.swift b/VDS/Classes/Constants.swift index fe3bd6f0..2ad7285b 100644 --- a/VDS/Classes/Constants.swift +++ b/VDS/Classes/Constants.swift @@ -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 } diff --git a/VDS/Classes/Control.swift b/VDS/Classes/Control.swift index 2cd702de..246b78a6 100644 --- a/VDS/Classes/Control.swift +++ b/VDS/Classes/Control.swift @@ -17,16 +17,18 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable { //-------------------------------------------------- public var subject = PassthroughSubject() public var subscribers = Set() - + //-------------------------------------------------- // 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 diff --git a/VDS/Classes/View.swift b/VDS/Classes/View.swift index 2a585e16..3d0d3841 100644 --- a/VDS/Classes/View.swift +++ b/VDS/Classes/View.swift @@ -17,13 +17,13 @@ open class View: UIView, ModelHandlerable, ViewProtocol, Resettable { //-------------------------------------------------- public var subject = PassthroughSubject() public var subscribers = Set() - + //-------------------------------------------------- // 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 diff --git a/VDS/Components/Badge/Badge.swift b/VDS/Components/Badge/Badge.swift index b6aceede..f90ed3e7 100644 --- a/VDS/Components/Badge/Badge.swift +++ b/VDS/Components/Badge/Badge.swift @@ -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 diff --git a/VDS/Components/Button/Button.swift b/VDS/Components/Button/Button.swift index e223c764..881bcefc 100644 --- a/VDS/Components/Button/Button.swift +++ b/VDS/Components/Button/Button.swift @@ -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 //-------------------------------------------------- diff --git a/VDS/Components/Checkbox/Checkbox.swift b/VDS/Components/Checkbox/Checkbox.swift index b556ba1b..e0a5fbc5 100644 --- a/VDS/Components/Checkbox/Checkbox.swift +++ b/VDS/Components/Checkbox/Checkbox.swift @@ -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() } diff --git a/VDS/Components/Checkbox/CheckboxGroup.swift b/VDS/Components/Checkbox/CheckboxGroup.swift index 8f1110a3..29dfa4c9 100644 --- a/VDS/Components/Checkbox/CheckboxGroup.swift +++ b/VDS/Components/Checkbox/CheckboxGroup.swift @@ -28,6 +28,11 @@ public class CheckboxGroupBase: 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) } } diff --git a/VDS/Components/Label/Label.swift b/VDS/Components/Label/Label.swift index b277a8a9..d56e7c70 100644 --- a/VDS/Components/Label/Label.swift +++ b/VDS/Components/Label/Label.swift @@ -19,19 +19,20 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable { //-------------------------------------------------- public var subject = PassthroughSubject() public var subscribers = Set() - + 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) diff --git a/VDS/Components/RadioBox/RadioBox.swift b/VDS/Components/RadioBox/RadioBox.swift index cec0f44d..4d3bc664 100644 --- a/VDS/Components/RadioBox/RadioBox.swift +++ b/VDS/Components/RadioBox/RadioBox.swift @@ -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() } diff --git a/VDS/Components/RadioBox/RadioBoxGroup.swift b/VDS/Components/RadioBox/RadioBoxGroup.swift index 5a0e323a..618eaf73 100644 --- a/VDS/Components/RadioBox/RadioBoxGroup.swift +++ b/VDS/Components/RadioBox/RadioBoxGroup.swift @@ -27,6 +27,11 @@ public class RadioBoxGroupBase: 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) } } diff --git a/VDS/Components/RadioButton/RadioButton.swift b/VDS/Components/RadioButton/RadioButton.swift index 24588687..c5c42777 100644 --- a/VDS/Components/RadioButton/RadioButton.swift +++ b/VDS/Components/RadioButton/RadioButton.swift @@ -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() } //-------------------------------------------------- diff --git a/VDS/Components/RadioButton/RadioButtonGroup.swift b/VDS/Components/RadioButton/RadioButtonGroup.swift index 57f3c0e3..9436d522 100644 --- a/VDS/Components/RadioButton/RadioButtonGroup.swift +++ b/VDS/Components/RadioButton/RadioButtonGroup.swift @@ -11,8 +11,7 @@ import UIKit public class RadioButtonGroup: RadioButtonGroupBase { 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: 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: 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: 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 - } - } } diff --git a/VDS/Components/RadioSwatch/RadioSwatch.swift b/VDS/Components/RadioSwatch/RadioSwatch.swift index 0e280a35..5514cdaa 100644 --- a/VDS/Components/RadioSwatch/RadioSwatch.swift +++ b/VDS/Components/RadioSwatch/RadioSwatch.swift @@ -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() } //-------------------------------------------------- diff --git a/VDS/Components/RadioSwatch/RadioSwatchGroup.swift b/VDS/Components/RadioSwatch/RadioSwatchGroup.swift index e6f1a242..93c7dae0 100644 --- a/VDS/Components/RadioSwatch/RadioSwatchGroup.swift +++ b/VDS/Components/RadioSwatch/RadioSwatchGroup.swift @@ -137,7 +137,6 @@ public class RadioSwatchGroupBase: SelectorGr label.surface = surface label.disabled = disabled collectionView.reloadData() - setNeedsLayout() } private func updateSelectors() { diff --git a/VDS/Components/Toggle/Toggle.swift b/VDS/Components/Toggle/Toggle.swift index 0e01621e..83c46c0c 100644 --- a/VDS/Components/Toggle/Toggle.swift +++ b/VDS/Components/Toggle/Toggle.swift @@ -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() } } diff --git a/VDS/Protocols/ModelHandlerable.swift b/VDS/Protocols/ModelHandlerable.swift index feab652e..ab6bbcb4 100644 --- a/VDS/Protocols/ModelHandlerable.swift +++ b/VDS/Protocols/ModelHandlerable.swift @@ -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 { subject .eraseToAnyPublisher() @@ -33,3 +24,10 @@ extension ModelHandlerable { .eraseToAnyPublisher() } } + +extension ModelHandlerable where Self: UIView { + public func didChange() { + subject.send() + setNeedsLayout() + } +}