//
|
// CommonDatePickerView.swift
|
// WanPai
|
//
|
// Created by 无故事王国 on 2023/6/27.
|
//
|
|
import UIKit
|
import JQTools
|
|
class CommonDatePickerView: UIView,JQNibView{
|
|
enum DatePickerType{
|
case YMD,YM,HHmm
|
}
|
|
@IBOutlet weak var view_container: UIView!
|
@IBOutlet weak var cons_bottom: NSLayoutConstraint!
|
@IBOutlet weak var pickerView: UIPickerView!
|
private var type:DatePickerType!
|
|
private var years = [Int]()
|
private var months = [12,11,10,9,8,7,6,5,4,3,2,1]
|
private var hours = [Int]()
|
private var minutes = [Int]()
|
private var days = [Int]()
|
private var clouse:((Int?,Int?,Int?,Int?,Int?)->Void)?
|
|
override func awakeFromNib() {
|
super.awakeFromNib()
|
cons_bottom.constant = -(JQ_ScreenW * 0.6974)
|
alpha = 0
|
layoutIfNeeded()
|
pickerView.delegate = self
|
pickerView.dataSource = self
|
}
|
|
|
/// 初始化
|
/// - Parameters:
|
/// - before: 向上N年
|
/// - after: 向下N年
|
/// - type: 显示状态
|
static func show(before:Int = 0,after:Int = 0,type:DatePickerType = .YM,clouse:@escaping (Int?,Int?,Int?,Int?,Int?)->Void){
|
let pickerView = CommonDatePickerView.jq_loadNibView()
|
pickerView.type = type
|
pickerView.clouse = clouse
|
|
|
if type == .YM || type == .YMD{
|
if before > 0{
|
for i in 0...before{
|
pickerView.years.append(Date().jq_nowYear() - i)
|
}
|
}
|
|
if after > 0{
|
for i in 0...after{
|
pickerView.years.append(Date().jq_nowYear() + i)
|
}
|
}
|
}
|
|
if type == .HHmm{
|
for i in 0...24{
|
pickerView.hours.append(i)
|
}
|
|
for i in 0...59{
|
pickerView.minutes.append(i)
|
}
|
}
|
|
pickerView.frame = sceneDelegate?.window?.frame ?? .zero
|
sceneDelegate?.window?.addSubview(pickerView)
|
|
pickerView.cons_bottom.constant = 0
|
UIView.animate(withDuration: 0.4) {
|
pickerView.alpha = 1
|
pickerView.layoutIfNeeded()
|
}
|
|
pickerView.pickerView.reloadAllComponents()
|
}
|
|
@IBAction func hiddenAction(_ sender: UIButton) {
|
cons_bottom.constant = -(JQ_ScreenW * 0.6974)
|
UIView.animate(withDuration: 0.4) {
|
self.alpha = 0
|
self.layoutIfNeeded()
|
} completion: { _ in
|
self.removeFromSuperview()
|
}
|
}
|
|
@IBAction func completeAction(_ sender: UIButton) {
|
|
|
var year:Int?
|
var month:Int?
|
var day:Int?
|
var hour:Int?
|
var minute:Int?
|
|
switch type{
|
case .YMD:
|
year = years[pickerView.selectedRow(inComponent: 0)]
|
if year == Date().jq_nowYear(){
|
month = months[pickerView.selectedRow(inComponent: 1)] - (12 - Date().jq_nowMonth())
|
}else{
|
month = months[pickerView.selectedRow(inComponent: 1)]
|
}
|
day = pickerView.selectedRow(inComponent: 2) + 1
|
case .YM:
|
year = years[pickerView.selectedRow(inComponent: 0)]
|
if year == Date().jq_nowYear(){
|
month = months[pickerView.selectedRow(inComponent: 1)] - (12 - Date().jq_nowMonth())
|
}else{
|
month = months[pickerView.selectedRow(inComponent: 1)]
|
}
|
case .HHmm:
|
hour = hours[pickerView.selectedRow(inComponent: 0)]
|
minute = minutes[pickerView.selectedRow(inComponent: 1)]
|
case .none:break
|
}
|
|
cons_bottom.constant = -(JQ_ScreenW * 0.6974)
|
UIView.animate(withDuration: 0.4) {
|
self.alpha = 0
|
self.layoutIfNeeded()
|
} completion: { _ in
|
self.removeFromSuperview()
|
self.clouse?(year,month,day,hour,minute)
|
}
|
}
|
|
|
|
override func layoutSubviews() {
|
super.layoutSubviews()
|
view_container.jq_addCorners(corner: [.topLeft,.topRight], radius: 20)
|
}
|
}
|
|
extension CommonDatePickerView:UIPickerViewDelegate{
|
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
|
if component == 0{
|
pickerView.reloadComponent(1)
|
if type == .YMD{pickerView.reloadComponent(2)}
|
}
|
if component == 1{
|
if type == .YMD{pickerView.reloadComponent(2)}
|
}
|
}
|
}
|
|
extension CommonDatePickerView:UIPickerViewDataSource{
|
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
|
|
if component == 0{
|
switch type{
|
case .YM,.YMD:return years.count
|
case .HHmm:return hours.count
|
case .none:return 0
|
}
|
}
|
|
if component == 1{
|
switch type{
|
case .YM,.YMD:
|
if component == 1 && pickerView.selectedRow(inComponent: 0) == 0{
|
return Date().jq_nowMonth()
|
}
|
return months.count
|
case .HHmm:
|
return minutes.count
|
case .none:
|
return 0
|
}
|
}
|
|
if component == 2{
|
switch type{
|
case .YMD:
|
let year = years[pickerView.selectedRow(inComponent: 0)]
|
var month = months[pickerView.selectedRow(inComponent: 1)]
|
|
if year == Date().jq_nowYear(){
|
month = Date().jq_nowMonth() - pickerView.selectedRow(inComponent: 1)
|
}
|
if year == Date().jq_nowYear() && month == Date().jq_nowMonth(){
|
return Date().jq_nowDay()
|
}else{
|
return Date.jq_getDays(year, month)
|
}
|
default:return 0
|
}
|
}
|
|
return 0
|
}
|
|
func numberOfComponents(in pickerView: UIPickerView) -> Int {
|
switch type{
|
case .YM,.HHmm:return 2
|
case .YMD:return 3
|
case .none:return 0
|
}
|
}
|
|
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
|
return 55
|
}
|
|
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
|
if component == 0{
|
switch type{
|
case .YM,.YMD:return "\(years[row])年"
|
case .HHmm:return String(format: "%02ld时", hours[row])
|
default:return nil
|
}
|
}
|
|
if component == 1{
|
switch type{
|
case .YM,.YMD:
|
let nowMonth = Date().jq_nowMonth()
|
if pickerView.selectedRow(inComponent: 0) == 0{
|
return "\(nowMonth - row)月"
|
}
|
return "\(months[row])月"
|
case .HHmm:return String(format: "%02ld分", minutes[row])
|
default:return nil
|
}
|
}
|
|
if component == 2{
|
switch type{
|
case .YMD:return "\(row + 1)日"
|
default:return nil
|
}
|
}
|
|
return nil
|
}
|
}
|