115 lines
3.1 KiB
Swift
115 lines
3.1 KiB
Swift
//
|
|
// BadgeViewController.swift
|
|
// VDSSample
|
|
//
|
|
// Created by Matt Bruce on 9/22/22.
|
|
//
|
|
|
|
import Foundation
|
|
import UIKit
|
|
import VDS
|
|
import VDSColorTokens
|
|
import Combine
|
|
|
|
class BadgeViewController: BaseViewController {
|
|
|
|
enum NumberOfLines: String, CaseIterable {
|
|
case unlimited
|
|
case one
|
|
case two
|
|
case three
|
|
case four
|
|
|
|
var intValue: Int {
|
|
switch self {
|
|
|
|
case .unlimited:
|
|
return 0
|
|
case .one:
|
|
return 1
|
|
case .two:
|
|
return 2
|
|
case .three:
|
|
return 3
|
|
case .four:
|
|
return 4
|
|
}
|
|
}
|
|
}
|
|
|
|
lazy var fillColorPickerSelectorView = {
|
|
PickerSelectorView(title: "red",
|
|
picker: self.picker,
|
|
items: BadgeFillColor.allCases)
|
|
}()
|
|
|
|
lazy var numberOfLinesPickerSelectorView = {
|
|
PickerSelectorView(title: "one",
|
|
picker: self.picker,
|
|
items: NumberOfLines.allCases)
|
|
}()
|
|
|
|
var textField = TextField()
|
|
var maxWidthTextField = TextField()
|
|
var badge = Badge()
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
addContentTopView(view: .makeWrapper(for: badge))
|
|
setupForm()
|
|
setupPicker()
|
|
setupModel()
|
|
}
|
|
|
|
func setupForm(){
|
|
addFormRow(label: "Fill Color", view: fillColorPickerSelectorView)
|
|
addFormRow(label: "Surface", view: surfacePickerSelectorView)
|
|
addFormRow(label: "Text", view: textField)
|
|
addFormRow(label: "Max Width", view: maxWidthTextField)
|
|
addFormRow(label: "Number of Lines", view: numberOfLinesPickerSelectorView)
|
|
|
|
textField
|
|
.textPublisher
|
|
.sink { [weak self] text in
|
|
self?.badge.text = text
|
|
}.store(in: &subscribers)
|
|
|
|
maxWidthTextField
|
|
.textPublisher
|
|
.sink { [weak self] text in
|
|
var float: CGFloat?
|
|
if let n = NumberFormatter().number(from: text) {
|
|
float = CGFloat(truncating: n)
|
|
}
|
|
self?.badge.maxWidth = float
|
|
}.store(in: &subscribers)
|
|
}
|
|
|
|
func setupModel() {
|
|
badge.fillColor = .red
|
|
badge.text = "Terms and conditions"
|
|
badge.numberOfLines = 1
|
|
|
|
//setup UI
|
|
surfacePickerSelectorView.text = badge.surface.rawValue
|
|
textField.text = badge.text
|
|
}
|
|
|
|
func setupPicker(){
|
|
|
|
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
|
|
self?.badge.surface = item
|
|
self?.contentTopView.backgroundColor = item.color
|
|
}
|
|
|
|
fillColorPickerSelectorView.onPickerDidSelect = { [weak self] item in
|
|
self?.badge.fillColor = item
|
|
}
|
|
|
|
numberOfLinesPickerSelectorView.onPickerDidSelect = { [weak self] item in
|
|
self?.badge.numberOfLines = item.intValue
|
|
}
|
|
}
|
|
}
|