vds_ios_sample/VDSSample/ViewControllers/ToggleViewController.swift
Matt Bruce 231fa9c486 example for toggle publishers (UIControl) listening for .valueChanged
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
2022-08-18 14:10:46 -05:00

135 lines
4.1 KiB
Swift

//
// ToggleViewController.swift
// VDSSample
//
// Created by Matt Bruce on 8/1/22.
//
import Foundation
import UIKit
import VDS
import VDSColorTokens
class ToggleViewController: ModelViewController<DefaultToggleModel>, StoryboardInitable {
deinit {
print("\(Self.self) deinit")
}
enum PickerType {
case surface, textSize, textPosition
}
static var storyboardId: String = "toggle"
static var storyboardName: String = "Components"
@IBOutlet weak var toggleContainerView: UIView!
@IBOutlet weak var picker: UIPickerView!
@IBOutlet weak var surfaceLabel: UILabel!
@IBOutlet weak var textSizeLabel: UILabel!
@IBOutlet weak var textPositionLabel: UILabel!
@IBOutlet weak var showTextStack: UIStackView!
var toggle = Toggle()
override func viewDidLoad() {
super.viewDidLoad()
toggleContainerView.addSubview(toggle)
toggle.leadingAnchor.constraint(equalTo: toggleContainerView.leadingAnchor, constant: 20).isActive = true
toggle.bottomAnchor.constraint(equalTo: toggleContainerView.bottomAnchor, constant: -20).isActive = true
toggle.topAnchor.constraint(equalTo: toggleContainerView.topAnchor, constant: 20).isActive = true
toggle.publisher(for: .valueChanged).sink { toggle in
print("toggle changed: \(toggle.isOn)")
}.store(in: &subscribers)
showTextStack.isHidden = true
view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
setupPicker()
}
override func updateView(viewModel: DefaultToggleModel) {
print("\(Self.self) updateView(viewModel)")
toggle.set(with: viewModel)
}
@IBAction func showTextChanged(_ sender: UISwitch) {
toggle.showText = sender.isOn
showTextStack.isHidden = !sender.isOn
}
@IBAction func disabledChanged(_ sender: UISwitch) {
toggle.disabled = sender.isOn
}
@IBAction func boldChanged(_ sender: UISwitch) {
toggle.isBold = sender.isOn
}
@IBAction func offTextDidEnd(_ sender: UITextField) {
toggle.offText = sender.text ?? "Off"
sender.resignFirstResponder()
}
@IBAction func onTextDidEnd(_ sender: UITextField) {
toggle.onText = sender.text ?? "On"
sender.resignFirstResponder()
}
@IBAction func surfaceClick(_ sender: Any) {
pickerType = .surface
}
@IBAction func textSizeClick(_ sender: Any) {
pickerType = .textSize
}
@IBAction func textPositionClick(_ sender: Any) {
pickerType = .textPosition
}
//Picker
var surfacePicker = SurfacePicker()
var textSizePicker = TextSizePicker()
var textPositionPicker = TextPositionPicker()
var pickerType: PickerType = .surface {
didSet {
func update(object: UIPickerViewDelegate & UIPickerViewDataSource){
picker.delegate = object
picker.dataSource = object
}
switch pickerType{
case .surface:
update(object: surfacePicker)
case .textSize:
update(object: textSizePicker)
case .textPosition:
update(object: textPositionPicker)
}
picker.reloadAllComponents()
picker.selectRow(0, inComponent: 0, animated: false)
picker.isHidden = false
}
}
func setupPicker(){
picker.isHidden = true
surfacePicker.onPickerDidSelect = { [weak self] item in
self?.toggle.surface = item
self?.toggleContainerView.backgroundColor = item.color
self?.surfaceLabel.text = item.rawValue
}
textSizePicker.onPickerDidSelect = { [weak self] item in
self?.toggle.fontSize = item
self?.textSizeLabel.text = item.rawValue
}
textPositionPicker.onPickerDidSelect = { [weak self] item in
self?.toggle.textPosition = item
self?.textPositionLabel.text = item.rawValue
}
}
}