// // RadioButtonGroup.swift // VDS // // Created by Matt Bruce on 8/11/22. // import Foundation import UIKit public class RadioButtonGroup: RadioButtonGroupBase { public override func didSelect(_ selectedControl: RadioButton) { selectedHandler?.toggle() selectedControl.toggle() if showError { showError = false } valueChanged() } } public class RadioButtonGroupBase: SelectorGroupSelectedHandlerBase { //-------------------------------------------------- // MARK: - Public Properties //-------------------------------------------------- public override var selectorViews: [ModelHandlerType] { 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) } } } } private var _showError: Bool = false public var showError: Bool { get { _showError } set { var newShowError = newValue if selectedHandler != nil, newShowError { newShowError = false } selectorViews.forEach { handler in handler.showError = newShowError } _showError = newShowError } } //-------------------------------------------------- // MARK: - Private Properties //-------------------------------------------------- private var mainStackView: UIStackView = { return UIStackView().with { $0.translatesAutoresizingMaskIntoConstraints = false $0.alignment = .fill $0.distribution = .fillProportionally $0.axis = .vertical $0.spacing = 10 } }() //-------------------------------------------------- // MARK: - Overrides //-------------------------------------------------- open override func setup() { super.setup() isAccessibilityElement = true accessibilityTraits = .button addSubview(mainStackView) mainStackView.topAnchor.constraint(equalTo: topAnchor).isActive = true mainStackView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true mainStackView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true mainStackView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true } }