// // Helper.swift // VDSSample // // Created by Matt Bruce on 11/18/22. // import Foundation import VDS import UIKit extension UIView { public static func makeWrapper(for view: UIView, edgeSpacing: CGFloat = 0.0, isTrailing: Bool = true) -> UIView { return makeWrapperWithConstraints(for: view, edgeSpacing: edgeSpacing, isTrailing: isTrailing).view } public static func makeWrapperWithConstraints(for view: UIView, edgeSpacing: CGFloat = 0.0, isTrailing: Bool = true) -> (view: UIView, container: NSLayoutConstraint.Container) { let container = NSLayoutConstraint.Container() let wrapper = UIView().with { $0.translatesAutoresizingMaskIntoConstraints = false } wrapper.addSubview(view) container.topConstraint = view.pinTop(anchor: wrapper.topAnchor, constant: edgeSpacing) container.bottomConstraint = view.pinBottom(anchor: wrapper.bottomAnchor, constant: edgeSpacing) container.leadingConstraint = view.pinLeading(anchor: wrapper.leadingAnchor, constant: edgeSpacing) if isTrailing { container.trailingConstraint = view.pinTrailingLessThanOrEqualTo(anchor: wrapper.trailingAnchor, constant: edgeSpacing) } else { container.trailingConstraint = view.pinTrailing(anchor: wrapper.trailingAnchor, constant: edgeSpacing) } return (wrapper, container) } } extension ButtonBase { func labelPublisher(_ label: UILabel){ onClick = { control in let newText = "\(control.text!) clicked - " if let labelText = label.text { let components = labelText.components(separatedBy: " - ") let last: String = (components.last ?? "0").trimmingCharacters(in: .whitespaces) let count = Int(last)! label.text = "\(newText)\(count+1)" } else { label.text = "\(newText)1" } print("clicked me") } } } extension BaseViewController { func makeButton(_ text: String, label: UILabel) -> Button { return Button().with{ $0.text = text $0.labelPublisher(label) } } func makeTextLink(_ text: String, label: UILabel) -> TextLink { return TextLink().with{ $0.text = text $0.labelPublisher(label) } } func makeTextLinkCaret(_ text: String, label: UILabel) -> TextLinkCaret { return TextLinkCaret().with{ $0.text = text $0.labelPublisher(label) } } }