fix
younger_times
2023-07-28 1639e83c543ea728592570bfa824702e0dca1d63
WanPai/Root/Other/View/CommonDatePickerView.swift
@@ -11,7 +11,7 @@
class CommonDatePickerView: UIView,JQNibView{
    enum DatePickerType{
        case YMD,YM
        case YMD,YM,HHmm
    }
    @IBOutlet weak var view_container: UIView!
@@ -21,8 +21,10 @@
    private var years = [Int]()
    private var months = [1,2,3,4,5,6,7,8,9,10,11,12]
    private var hours = [Int]()
    private var minutes = [Int]()
    private var days = [Int]()
    private var clouse:((Int,Int,Int?)->Void)?
    private var clouse:((Int?,Int?,Int?,Int?,Int?)->Void)?
    override func awakeFromNib() {
        super.awakeFromNib()
@@ -39,23 +41,36 @@
        ///   - before: 向上N年
        ///   - after: 向下N年
        ///   - type: 显示状态
    static func show(before:Int = 0,after:Int = 0,type:DatePickerType = .YM,clouse:@escaping (Int,Int,Int?)->Void){
    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 before > 0{
            for i in 0...before{
                pickerView.years.append(Date().jq_nowYear() - i)
        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 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.years = pickerView.years.sorted()
        pickerView.frame = screnDelegate?.window?.frame ?? .zero
        screnDelegate?.window?.addSubview(pickerView)
@@ -82,9 +97,11 @@
    @IBAction func completeAction(_ sender: UIButton) {
        var year:Int!
        var month:Int!
        var year:Int?
        var month:Int?
        var day:Int?
        var hour:Int?
        var minute:Int?
        switch type{
            case .YMD:
@@ -94,6 +111,9 @@
            case .YM:
                year = years[pickerView.selectedRow(inComponent: 0)]
                month = months[pickerView.selectedRow(inComponent: 1)]
            case .HHmm:
                hour = hours[pickerView.selectedRow(inComponent: 0)]
                minute = minutes[pickerView.selectedRow(inComponent: 1)]
            case .none:break
        }
@@ -103,7 +123,7 @@
            self.layoutIfNeeded()
        } completion: { _ in
            self.removeFromSuperview()
            self.clouse?(year,month,day)
            self.clouse?(year,month,day,hour,minute)
        }
    }
@@ -123,7 +143,6 @@
        }
        if component == 1{
            if type == .YMD{pickerView.reloadComponent(2)}
        }
    }
}
@@ -131,24 +150,45 @@
extension CommonDatePickerView:UIPickerViewDataSource{
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if component == 0{return years.count
        }else if component == 1{
            if component == 1 && pickerView.selectedRow(inComponent: 0) == 0{
                return Date().jq_nowMonth()
        if component == 0{
            switch type{
                case .YM,.YMD:return years.count
                case .HHmm:return hours.count
                case .none:return 0
            }
            return months.count
        }else if component == 2{
            let year = years[pickerView.selectedRow(inComponent: 0)]
            let month = months[pickerView.selectedRow(inComponent: 1)]
            return Date.jq_getDays(year, month)
        }
        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)]
                    let month = months[pickerView.selectedRow(inComponent: 1)]
                    return Date.jq_getDays(year, month)
                default:return 0
            }
        }
        return 0
    }
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        switch type{
            case .YM:return 2
            case .YM,.HHmm:return 2
            case .YMD:return 3
            case .none:return 0
        }
@@ -160,11 +200,28 @@
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if component == 0{
            return "\(years[row])年"
        }else if component == 1{
            return "\(months[row])月"
        }else{
            return "\(row + 1)日"
            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: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
    }
}