From 368cae35a7b53a1a50d8d05ebc099abe82e57a10 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 24 Aug 2022 11:21:40 -0500 Subject: [PATCH] refactore checkbox Signed-off-by: Matt Bruce --- VDSSample/Protocols/PickerBase.swift | 8 +- .../CheckBoxGroupViewController.swift | 6 +- .../CheckboxViewController.swift | 116 ++++++++++-------- 3 files changed, 76 insertions(+), 54 deletions(-) diff --git a/VDSSample/Protocols/PickerBase.swift b/VDSSample/Protocols/PickerBase.swift index 9403ea7..5ad6d07 100644 --- a/VDSSample/Protocols/PickerBase.swift +++ b/VDSSample/Protocols/PickerBase.swift @@ -45,11 +45,17 @@ class PickerBase: NSObject, PickerViewable, UIPicker } class PickerSelectorView: UIStackView { - var label = UILabel() + private var label = UILabel() var button = UIButton(type: .system).with { instance in instance.configuration = .filled() instance.setTitle("Select", for: .normal) } + + var text: String = "" { + didSet { + label.text = text + } + } init(title: String){ super.init(frame: .zero) diff --git a/VDSSample/ViewControllers/CheckBoxGroupViewController.swift b/VDSSample/ViewControllers/CheckBoxGroupViewController.swift index eb29afe..6d378b9 100644 --- a/VDSSample/ViewControllers/CheckBoxGroupViewController.swift +++ b/VDSSample/ViewControllers/CheckBoxGroupViewController.swift @@ -34,7 +34,7 @@ class CheckboxGroupViewController: ModelScrollViewController, StoryboardInitable { +class CheckboxViewController: ModelScrollViewController { enum PickerType { case surface } - static var storyboardId: String = "checkbox" - static var storyboardName: String = "Components" - - @IBOutlet weak var checkboxContainerView: UIView! - @IBOutlet weak var picker: UIPickerView! - @IBOutlet weak var surfaceLabel: UILabel! - - @IBOutlet weak var disabledSwitch: UISwitch! - @IBOutlet weak var labelTextField: UITextField! - @IBOutlet weak var childTextField: UITextField! - @IBOutlet weak var showErrorSwitch: UISwitch! - @IBOutlet weak var errorTextField: UITextField! + + var picker = UIPickerView() + var surfacePickerSelectorView = PickerSelectorView(title: "light") + var disabledSwitch = UISwitch() + var labelTextField = TextField() + var childTextField = TextField() + var errorTextField = TextField() + var showErrorSwitch = UISwitch() var checkbox = Checkbox() override func viewDidLoad() { super.viewDidLoad() - checkboxContainerView.addSubview(checkbox) - checkbox.leadingAnchor.constraint(equalTo: checkboxContainerView.leadingAnchor, constant: 10).isActive = true - checkbox.bottomAnchor.constraint(equalTo: checkboxContainerView.bottomAnchor, constant: -20).isActive = true - checkbox.topAnchor.constraint(equalTo: checkboxContainerView.topAnchor, constant: 20).isActive = true - checkbox.trailingAnchor.constraint(equalTo: checkboxContainerView.trailingAnchor, constant: 10).isActive = true - view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:)))) + addContentTopView(view: checkbox) + + addFormRow(label: "Disabled", view: disabledSwitch) + addFormRow(label: "Surface", view: surfacePickerSelectorView) + addFormRow(label: "Label Text", view: labelTextField) + addFormRow(label: "Childe Text", view: childTextField) + addFormRow(label: "Error", view: showErrorSwitch) + addFormRow(label: "Error Text", view: errorTextField) + + checkbox + .handlerPublisher() + .sink { [weak self] viewModel in + self?.model = viewModel + }.store(in: &subscribers) + + showErrorSwitch + .publisher(for: .valueChanged) + .sink { [weak self] sender in + self?.checkbox.hasError = sender.isOn + }.store(in: &subscribers) + + disabledSwitch + .publisher(for: .valueChanged) + .sink { [weak self] sender in + self?.checkbox.disabled = sender.isOn + }.store(in: &subscribers) + + labelTextField + .textPublisher + .sink { [weak self] text in + self?.checkbox.labelText = text + }.store(in: &subscribers) + + childTextField + .textPublisher + .sink { [weak self] text in + self?.checkbox.childText = text + }.store(in: &subscribers) + + errorTextField + .textPublisher + .sink { [weak self] text in + self?.checkbox.errorText = text + }.store(in: &subscribers) + + + surfacePickerSelectorView.button + .publisher(for: .touchUpInside) + .sink { [weak self] _ in + self?.pickerType = .surface + }.store(in: &subscribers) + setupPicker() setupModel() } @@ -57,7 +99,7 @@ class CheckboxViewController: ModelViewController, Storyb }.store(in: &subscribers) //setup UI - surfaceLabel.text = model.surface.rawValue + surfacePickerSelectorView.text = model.surface.rawValue disabledSwitch.isOn = model.selected labelTextField.text = model.labelText childTextField.text = model.childText @@ -70,34 +112,7 @@ class CheckboxViewController: ModelViewController, Storyb print("\(Self.self) updateView(viewModel)") checkbox.set(with: viewModel) } - - @IBAction func disabledChanged(_ sender: UISwitch) { - checkbox.disabled = sender.isOn - } - - @IBAction func onLabelTextDidEnd(_ sender: UITextField) { - checkbox.labelText = sender.text - sender.resignFirstResponder() - } - - @IBAction func onChildTextDidEnd(_ sender: UITextField) { - checkbox.childText = sender.text - sender.resignFirstResponder() - } - - @IBAction func showErrorChanged(_ sender: UISwitch) { - checkbox.hasError = sender.isOn - } - - @IBAction func onErrorTextDidEnd(_ sender: UITextField) { - checkbox.errorText = sender.text - sender.resignFirstResponder() - } - - @IBAction func surfaceClick(_ sender: Any) { - pickerType = .surface - } - + //Picker var surfacePicker = SurfacePicker() @@ -119,11 +134,12 @@ class CheckboxViewController: ModelViewController, Storyb } func setupPicker(){ + contentStackView.addArrangedSubview(picker) picker.isHidden = true surfacePicker.onPickerDidSelect = { [weak self] item in self?.checkbox.surface = item - self?.checkboxContainerView.backgroundColor = item.color - self?.surfaceLabel.text = item.rawValue + self?.contentTopView.backgroundColor = item.color + self?.surfacePickerSelectorView.text = item.rawValue } } }