Commit f40bce3e authored by David黄金龙's avatar David黄金龙

时间点 选择器

parent 86670517
......@@ -11,9 +11,6 @@ import UIKit
class YHRangeDatePickerSheetView2: UIView {
static let contentViewH2 : CGFloat = 40 + 13 + 80 + 12 + YHRangeDatePickerView2.viewH2 + 58 + 98//(16 + 24) + (12 + 1) + (12 + 68) + 12 + YHRangeDatePickerView2.viewH2 + 52 + 6 + 98
typealias Block = (Date,Date) -> ()
var block: Block?
lazy var blackMaskView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hex: 0x0F1214, alpha: 0.5)
......@@ -110,6 +107,17 @@ class YHRangeDatePickerSheetView2: UIView {
super.init(frame: frame)
setupUI()
}
private var selectedDate : Date?
private var selectedTime : String?
typealias Block = (String,String) -> ()
var block: Block?
var minDateStr : String = "2024-10-01 14:00"
var maxDateStr : String = "2025-10-01 14:00"
}
extension YHRangeDatePickerSheetView2 {
......@@ -134,28 +142,42 @@ extension YHRangeDatePickerSheetView2 {
@objc func clickSureBtn() {
if isChooseOk() {
if let date1 = datePickView.startDate,let date2 = datePickView.endDate {
self.block?(date1,date2)
if let date1 = datePickView.startDate,let time = selectedTime {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let dateString = dateFormatter.string(from: date1)
self.block?(dateString,time)
}
dismiss()
} else {
YHHUD.flash(message: "选择开始/结束日期")
var msg = "请选择日期"
if selectedTime == nil {
msg = "请选择具体时间"
}
YHHUD.flash(message: msg)
}
}
func isChooseOk()->Bool {
if datePickView.startDate != nil,datePickView.endDate != nil {
if selectedDate != nil,selectedTime != nil {
return true
}
return false
}
func checkSubmitButtonStatus() {
if isChooseOk() {
setSubmitButtonDisable(false)
} else {
setSubmitButtonDisable(true)
}
}
}
private extension YHRangeDatePickerSheetView2 {
func setSubmitButtonDisable(_ disableFlag : Bool) {
/*
......@@ -172,7 +194,7 @@ private extension YHRangeDatePickerSheetView2 {
return button
}()
*/
rewardBtn.isEnabled = !rewardBtn.isEnabled
rewardBtn.isEnabled = !disableFlag
if disableFlag {
//不可点击
rewardBtn.backgroundColor = UIColor.brandMainColor30
......@@ -247,6 +269,22 @@ private extension YHRangeDatePickerSheetView2 {
make.left.right.equalToSuperview()
make.height.equalTo(YHRangeDatePickerView2.viewH2)
}
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm"
if minDateStr.count == "2024-11-10 14:20".count,maxDateStr.count == "2024-11-10 14:20".count {
let miniDate = dateFormatter.date(from: minDateStr)
let maxDate = dateFormatter.date(from: maxDateStr)
datePickView.minDate = miniDate
datePickView.maxDate = maxDate
}
whiteContentView.addSubview(timeHoldView)
timeHoldView.snp.makeConstraints { make in
make.top.equalTo(datePickView.snp.bottom)
......@@ -254,5 +292,27 @@ private extension YHRangeDatePickerSheetView2 {
make.height.equalTo(52)
}
setSubmitButtonDisable(true)
let tap : UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapButton(gestureRecognizer:)))
timeHoldView.isUserInteractionEnabled = true
timeHoldView.addGestureRecognizer(tap)
datePickView.block = { [weak self] date in
self?.selectedDate = date
self?.checkSubmitButtonStatus()
}
}
@objc func tapButton(gestureRecognizer:UITapGestureRecognizer) {
YHDatePickView.show(type: .timeForAppointHK, title: "选择具体时间", lastIsTaday: false, currentDay: "") { date in
self.selectedTime = date
self.timeHoldView.timeTextField.text = date
self.checkSubmitButtonStatus()
} dismiss: {
}
}
}
......@@ -11,6 +11,13 @@ import FSCalendar
class YHRangeDatePickerView2: UIView,FSCalendarDataSource, FSCalendarDelegate, FSCalendarDelegateAppearance {
typealias Block = (Date?) -> ()
var block: Block?
var minDate : Date?
var maxDate : Date?
static let viewH2 : CGFloat = 396//508.0 - 52.0 -20 - 50
lazy var calendar: FSCalendar = {
......@@ -126,10 +133,16 @@ extension YHRangeDatePickerView2 {
}
func minimumDate(for calendar: FSCalendar) -> Date {
if let minDate = minDate {
return minDate
}
return self.gregorian.date(byAdding: .day, value: 1, to: Date())!
}
func maximumDate(for calendar: FSCalendar) -> Date {
if let maxDate = maxDate {
return maxDate
}
return self.gregorian.date(byAdding: .day, value: 365, to: Date())!
}
......@@ -193,30 +206,35 @@ private extension YHRangeDatePickerView2 {
func tapOneDate(_ date : Date) {
if startDate == nil {
startDate = date
YHHUD.flash(message: "选择结束日期")
} else if endDate == nil {
// 比较结果
let comparisonResult = gregorian.compare(startDate!, to: date, toGranularity: .day)
switch comparisonResult {
case .orderedAscending:
print("第一个日期在第二个日期之前")
endDate = date
case .orderedDescending:
print("第一个日期在第二个日期之后")
endDate = startDate
startDate = date
case .orderedSame:
print("两个日期是同一天")
}
} else {
}
// else if endDate == nil {
// // 比较结果
// let comparisonResult = gregorian.compare(startDate!, to: date, toGranularity: .day)
//
// switch comparisonResult {
// case .orderedAscending:
// print("第一个日期在第二个日期之前")
// endDate = date
// case .orderedDescending:
// print("第一个日期在第二个日期之后")
// endDate = startDate
// startDate = date
// case .orderedSame:
// print("两个日期是同一天")
// }
//
// }
else {
calendar.deselect(startDate!)
calendar.deselect(endDate!)
// calendar.deselect(endDate!)
startDate = date
endDate = nil
YHHUD.flash(message: "选择结束日期")
// endDate = nil
// YHHUD.flash(message: "选择结束日期")
}
YHHUD.flash(message: "选择具体时间")
self.block?(startDate)
}
......
......@@ -20,6 +20,7 @@ enum YHDateType: Int {
case yyyymmdd = 0
case yyyymm = 1
case yyyy = 2
case timeForAppointHK = 3
}
class YHDatePickView: UIView {
......@@ -45,6 +46,8 @@ class YHDatePickView: UIView {
pickerView.selectRow(self.dateCom.month! - 1, inComponent: 1, animated: true)
case .yyyy:
pickerView.selectRow(99 - index, inComponent: 0, animated: true)
case .timeForAppointHK:
pickerView.selectRow(Int(arrTimeForAppointHK.count / 2), inComponent: 0, animated: true)
}
}
}
......@@ -52,6 +55,9 @@ class YHDatePickView: UIView {
var dateCom: DateComponents = Calendar.current.dateComponents([.year, .month, .day], from: Date())
// 日期分割符 eg: 2024-01-01
static let separator: String = "-"
//固定参数值
private var arrTimeForAppointHK : [String] = ["09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00"]
var title: String = "" {
didSet {
......@@ -68,6 +74,8 @@ class YHDatePickView: UIView {
pickerView.reloadAllComponents()
case .yyyy:
pickerView.reloadAllComponents()
case .timeForAppointHK:
pickerView.reloadAllComponents()
}
}
}
......@@ -206,6 +214,8 @@ class YHDatePickView: UIView {
dateFormatter.dateFormat = "yyyy-MM"
case .yyyy:
dateFormatter.dateFormat = "yyyy"
case .timeForAppointHK:
dateFormatter.dateFormat = "yyyy"
}
if currentDay != "", let date = dateFormatter.date(from: currentDay) {
view.dateCom = Calendar.current.dateComponents([.year, .month, .day], from: date)
......@@ -233,6 +243,8 @@ class YHDatePickView: UIView {
date = String(format: "%02ld%@%02ld", (self.currentDateCom.year!) + self.pickerView.selectedRow(inComponent: 0) - 99, Self.separator, self.pickerView.selectedRow(inComponent: 1) + 1)
case .yyyy:
date = String(format: "%02ld", (self.currentDateCom.year!) + self.pickerView.selectedRow(inComponent: 0) - 99)
case .timeForAppointHK:
date = arrTimeForAppointHK[self.pickerView.selectedRow(inComponent: 0)]
}
if self.backDate != nil {
self.backDate!(date)
......@@ -260,10 +272,15 @@ extension YHDatePickView: UIPickerViewDelegate,UIPickerViewDataSource {
return 2
case .yyyy:
return 1
case .timeForAppointHK:
return 1
}
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if component == 0 {
if let type = type,type == .timeForAppointHK {
return arrTimeForAppointHK.count
}
if lastIsTaday {
return 100
}
......@@ -319,6 +336,8 @@ extension YHDatePickView: UIPickerViewDelegate,UIPickerViewDataSource {
return KScreenWidth / 2
case .yyyy:
return KScreenWidth
case .timeForAppointHK:
return KScreenWidth
}
}
......@@ -331,6 +350,9 @@ extension YHDatePickView: UIPickerViewDelegate,UIPickerViewDataSource {
pickerView.subviews[1].backgroundColor = UIColor.brandMainColor6
}
if component == 0 {
if let type = type,type == .timeForAppointHK {
return arrTimeForAppointHK[row]
}
return "\((currentDateCom.year!) + row - 99)"
} else if component == 1 {
return "\(row + 1)"
......
......@@ -409,27 +409,29 @@ extension YHMyViewController : UITableViewDelegate, UITableViewDataSource {
self.navigationController?.pushViewController(vc)
case .myOrder:
//我的订单
if let token = YHLoginManager.shared.userModel?.token,token.count > 5 {
var url = YHBaseUrlManager.shared.curH5URL() + "superAppBridge.html#/order/my"
url = "?param=" + YHLoginManager.shared.h5Token
printLog("URL: \(url)")
let vc = YHH5WebViewVC()
vc.url = url
vc.isFullScreenFlag = false
vc.navTitle = "我的订单"
vc.isSupportWebviewInterBackFlag = true
UIViewController.current?.navigationController?.pushViewController(vc)
}
// let view = YHRangeDatePickerSheetView2.sheetView()
// view.block = {
// [weak self] (startDate,endDate) in
// guard let self = self else { return }
//
// printLog("开始时间: \(startDate)")
// printLog("结束时间: \(endDate)")
// if let token = YHLoginManager.shared.userModel?.token,token.count > 5 {
// var url = YHBaseUrlManager.shared.curH5URL() + "superAppBridge.html#/order/my"
// url = "?param=" + YHLoginManager.shared.h5Token
// printLog("URL: \(url)")
// let vc = YHH5WebViewVC()
// vc.url = url
// vc.isFullScreenFlag = false
// vc.navTitle = "我的订单"
// vc.isSupportWebviewInterBackFlag = true
// UIViewController.current?.navigationController?.pushViewController(vc)
// }
// view.show()//for test hjl
let view = YHRangeDatePickerSheetView2.sheetView()
view.minDateStr = "2025-10-18 15:30"
view.maxDateStr = "2025-10-20 15:30"
view.block = {
[weak self] (startDate,time) in
guard let self = self else { return }
printLog("开始时间: \(startDate)")
printLog("结束时间: \(time)")
}
view.show()//for test hjl
default:
printLog("不需要响应")
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment