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

View File

@ -8,6 +8,6 @@
import Foundation import Foundation
public struct Constants { public struct Constants {
public static let ModelStateDebounce = 0.02 public static let ModelStateDebounce = 0.0 //.001
public static let PaddingOne = 10.0 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 subject = PassthroughSubject<Void, Never>()
public var subscribers = Set<AnyCancellable>() public var subscribers = Set<AnyCancellable>()
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Properties // MARK: - Properties
//-------------------------------------------------- //--------------------------------------------------
private var initialSetupPerformed = false 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 var disabled: Bool = false { didSet { isEnabled = !disabled } }
open override var isSelected: Bool { didSet { didChange() } }
open override var isEnabled: Bool { open override var isEnabled: Bool {
get { !disabled } get { !disabled }
set { set {
@ -34,7 +36,7 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
disabled = !newValue disabled = !newValue
} }
isUserInteractionEnabled = isEnabled isUserInteractionEnabled = isEnabled
subject.send() didChange()
} }
} }
@ -63,7 +65,6 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
open func initialSetup() { open func initialSetup() {
if !initialSetupPerformed { if !initialSetupPerformed {
initialSetupPerformed = true initialSetupPerformed = true
setupUpdateView()
setup() setup()
updateView() updateView()
} }
@ -79,10 +80,13 @@ open class Control: UIControl, ModelHandlerable, ViewProtocol, Resettable {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Overrides // MARK: - Overrides
//-------------------------------------------------- //--------------------------------------------------
open func updateView() { open override func layoutSubviews() {
fatalError("Implement updateView") super.layoutSubviews()
updateView()
} }
open func updateView() {}
open func reset() { open func reset() {
backgroundColor = .clear backgroundColor = .clear
surface = .light surface = .light

View File

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

View File

@ -20,25 +20,25 @@ open class BadgeBase: View, Accessable {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Public Properties // 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 // MARK: - Constraints

View File

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

View File

@ -91,41 +91,41 @@ open class CheckboxBase: Control, Accessable, BinaryColorable, Errorable {
}() }()
//can't bind to @Proxy //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? { private var labelModel: DefaultLabelModel? {
guard let labelText = labelText else { return nil } guard let labelText = labelText else { return nil }
@ -289,8 +289,6 @@ open class CheckboxBase: Control, Accessable, BinaryColorable, Errorable {
setAccessibilityHint() setAccessibilityHint()
setAccessibilityValue(isSelected) setAccessibilityValue(isSelected)
setAccessibilityLabel(isSelected) setAccessibilityLabel(isSelected)
setNeedsLayout()
layoutIfNeeded()
} }

View File

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

View File

@ -19,19 +19,20 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
//-------------------------------------------------- //--------------------------------------------------
public var subject = PassthroughSubject<Void, Never>() public var subject = PassthroughSubject<Void, Never>()
public var subscribers = Set<AnyCancellable>() public var subscribers = Set<AnyCancellable>()
public var hasChanged: Bool = false
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Properties // 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 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 { open override var isEnabled: Bool {
get { !disabled } get { !disabled }
@ -40,13 +41,13 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
disabled = !newValue disabled = !newValue
} }
isUserInteractionEnabled = isEnabled isUserInteractionEnabled = isEnabled
subject.send() didChange()
} }
} }
override open var text: String? { override open var text: String? {
didSet { didSet {
subject.send() didChange()
} }
} }
@ -88,9 +89,7 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
translatesAutoresizingMaskIntoConstraints = false translatesAutoresizingMaskIntoConstraints = false
accessibilityCustomActions = [] accessibilityCustomActions = []
accessibilityTraits = .staticText accessibilityTraits = .staticText
setupUpdateView()
setup() setup()
updateView()
} }
open func setup() {} open func setup() {}
@ -107,10 +106,15 @@ open class LabelBase: UILabel, ModelHandlerable, ViewProtocol, Resettable {
accessibilityTraits = .staticText accessibilityTraits = .staticText
numberOfLines = 0 numberOfLines = 0
} }
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Overrides // MARK: - Overrides
//-------------------------------------------------- //--------------------------------------------------
open override func layoutSubviews() {
super.layoutSubviews()
updateView()
}
open func updateView() { open func updateView() {
textAlignment = textPosition.textAlignment textAlignment = textPosition.textAlignment
textColor = textColorConfiguration.getColor(self) 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 //functions
//-------------------------------------------------- //--------------------------------------------------
@ -222,8 +222,6 @@ open class RadioBoxBase: Control, BinaryColorable, Accessable {
setAccessibilityHint() setAccessibilityHint()
setAccessibilityValue(isSelected) setAccessibilityValue(isSelected)
setAccessibilityLabel(isSelected) setAccessibilityLabel(isSelected)
setNeedsLayout()
layoutIfNeeded()
} }

View File

@ -27,6 +27,11 @@ public class RadioBoxGroupBase<ModelHandlerType: RadioBoxBase>: SelectorGroupSel
didSet { didSet {
for selector in selectorViews { for selector in selectorViews {
if !mainStackView.arrangedSubviews.contains(selector) { if !mainStackView.arrangedSubviews.contains(selector) {
selector
.publisher(for: .touchUpInside)
.sink { [weak self] handler in
self?.didSelect(handler)
}.store(in: &subscribers)
mainStackView.addArrangedSubview(selector) 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 // MARK: - Constraints
@ -262,8 +262,6 @@ open class RadioButtonBase: Control, Accessable, BinaryColorable, Errorable {
setAccessibilityHint() setAccessibilityHint()
setAccessibilityValue(isSelected) setAccessibilityValue(isSelected)
setAccessibilityLabel(isSelected) setAccessibilityLabel(isSelected)
setNeedsLayout()
layoutIfNeeded()
} }
//-------------------------------------------------- //--------------------------------------------------

View File

@ -11,8 +11,7 @@ import UIKit
public class RadioButtonGroup: RadioButtonGroupBase<RadioButton> { public class RadioButtonGroup: RadioButtonGroupBase<RadioButton> {
public override func didSelect(_ selectedControl: RadioButton) { public override func didSelect(_ selectedControl: RadioButton) {
let oldSelectedControl = selectorViews.filter { $0.isSelected == true }.first selectedHandler?.toggle()
oldSelectedControl?.toggle()
selectedControl.toggle() selectedControl.toggle()
if showError { if showError {
showError = false showError = false
@ -30,6 +29,11 @@ public class RadioButtonGroupBase<ModelHandlerType: RadioButtonBase>: SelectorGr
didSet { didSet {
for selector in selectorViews { for selector in selectorViews {
if !mainStackView.arrangedSubviews.contains(selector) { if !mainStackView.arrangedSubviews.contains(selector) {
selector
.publisher(for: .touchUpInside)
.sink { [weak self] handler in
self?.didSelect(handler)
}.store(in: &subscribers)
mainStackView.addArrangedSubview(selector) mainStackView.addArrangedSubview(selector)
} }
} }
@ -41,7 +45,7 @@ public class RadioButtonGroupBase<ModelHandlerType: RadioButtonBase>: SelectorGr
get { _showError } get { _showError }
set { set {
var newShowError = newValue var newShowError = newValue
if selectedModelHandler != nil, newShowError { if selectedHandler != nil, newShowError {
newShowError = false newShowError = false
} }
selectorViews.forEach { handler in selectorViews.forEach { handler in
@ -79,14 +83,4 @@ public class RadioButtonGroupBase<ModelHandlerType: RadioButtonBase>: SelectorGr
mainStackView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true mainStackView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
mainStackView.bottomAnchor.constraint(equalTo: bottomAnchor).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 //functions
//-------------------------------------------------- //--------------------------------------------------
@ -143,8 +143,6 @@ open class RadioSwatchBase: Control, Accessable, DataTrackable, BinaryColorable
setAccessibilityHint() setAccessibilityHint()
setAccessibilityValue(isSelected) setAccessibilityValue(isSelected)
setAccessibilityLabel(isSelected) setAccessibilityLabel(isSelected)
setNeedsLayout()
layoutIfNeeded()
} }
//-------------------------------------------------- //--------------------------------------------------

View File

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

View File

@ -120,41 +120,41 @@ open class ToggleBase: Control, Accessable, DataTrackable, BinaryColorable {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Public Properties // 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 // MARK: - Constraints
@ -314,7 +314,5 @@ open class ToggleBase: Control, Accessable, DataTrackable, BinaryColorable {
setAccessibilityValue(isOn) setAccessibilityValue(isOn)
setAccessibilityLabel(isOn) setAccessibilityLabel(isOn)
backgroundColor = surface.color backgroundColor = surface.color
setNeedsLayout()
layoutIfNeeded()
} }
} }

View File

@ -16,16 +16,7 @@ public protocol ModelHandlerable: AnyObject, Initable, Disabling, Surfaceable {
} }
extension ModelHandlerable { 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> { public func handlerPublisher() -> AnyPublisher<Void, Never> {
subject subject
.eraseToAnyPublisher() .eraseToAnyPublisher()
@ -33,3 +24,10 @@ extension ModelHandlerable {
.eraseToAnyPublisher() .eraseToAnyPublisher()
} }
} }
extension ModelHandlerable where Self: UIView {
public func didChange() {
subject.send()
setNeedsLayout()
}
}