72 lines
2.4 KiB
Swift
72 lines
2.4 KiB
Swift
//
|
|
// DatePickerPopoverViewController.swift
|
|
// VDS
|
|
//
|
|
// Created by Matt Bruce on 5/14/24.
|
|
//
|
|
|
|
import Foundation
|
|
import UIKit
|
|
|
|
protocol DatePickerViewControllerDelegate: NSObject {
|
|
func didSelectDate(_ controller: DatePicker.DatePickerViewController, date: Date)
|
|
}
|
|
|
|
extension DatePicker {
|
|
class DatePickerViewController: UIViewController {
|
|
private var padding: CGFloat = 15
|
|
private var topPadding: CGFloat { 10 + padding }
|
|
private var calendarModel: CalendarModel
|
|
private let picker = CalendarBase()
|
|
weak var delegate: DatePickerViewControllerDelegate?
|
|
|
|
init(_ calendarModel: CalendarModel, delegate: DatePickerViewControllerDelegate?) {
|
|
self.delegate = delegate
|
|
self.calendarModel = calendarModel
|
|
super.init(nibName: nil, bundle: nil)
|
|
self.picker.onChange = { [weak self] control in
|
|
guard let self else { return }
|
|
self.delegate?.didSelectDate(self, date: control.selectedDate)
|
|
}
|
|
}
|
|
|
|
var selectedDate: Date = Date() {
|
|
didSet {
|
|
picker.selectedDate = selectedDate
|
|
}
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
view.addSubview(picker)
|
|
picker.surface = calendarModel.surface
|
|
picker.hideContainerBorder = calendarModel.hideContainerBorder
|
|
picker.hideCurrentDateIndicator = calendarModel.hideCurrentDateIndicator
|
|
picker.indicators = calendarModel.indicators
|
|
picker.activeDates = calendarModel.activeDates
|
|
picker.inactiveDates = calendarModel.inactiveDates
|
|
picker.selectedDate = calendarModel.selectedDate
|
|
picker.minDate = calendarModel.minDate
|
|
picker.maxDate = calendarModel.maxDate
|
|
picker.pinToSuperView(.init(top: topPadding, left: padding, bottom: padding, right: padding))
|
|
view.backgroundColor = picker.backgroundColor
|
|
}
|
|
|
|
override var preferredContentSize: CGSize {
|
|
get {
|
|
var size = picker.frame.size
|
|
size.height += 40
|
|
size.width += 30
|
|
return size
|
|
}
|
|
set {
|
|
super.preferredContentSize = newValue
|
|
}
|
|
}
|
|
}
|
|
}
|