gpt4 book ai didi

Swift 3 以编程方式设置日期选择器的日期范围

转载 作者:行者123 更新时间:2023-11-30 11:20:09 26 4
gpt4 key购买 nike

我想以编程方式创建一个日期选择器,范围从今天到 6 天后,例如今天,7/14,...7/20。

代码如下。

self.datePickerView = UIDatePicker(frame: CGRect(x: 0, y: 50, width: UIScreen.main.bounds.width, height: 180))

if let datePickerView = self.datePickerView {
let currentDate: Date = Date()

datePickerView.calendar = NSCalendar.current
datePickerView.timeZone = NSCalendar.current.timeZone

var beginComponents = DateComponents()
beginComponents.day = 0
datePickerView.minimumDate = Calendar.current.date(byAdding: beginComponents, to: currentDate)

var endComponents = DateComponents()
endComponents.day = 6
datePickerView.maximumDate = Calendar.current.date(byAdding: endComponents, to: currentDate)

dateSelectorView.addSubview(datePickerView)
}

日期选择器不仅显示 7 天,还显示过去日期(例如 7/12)和 future 日期(例如 7/21)。有没有办法只显示7天?

提前非常感谢!

最佳答案

似乎不可能更改 UIDatePicker 我建议实现自定义 UIPickerView 来完成您想要的操作。

Date 上创建扩展,并添加新方法 next(numberOfDays:from:) 和辅助方法 nextSevenDays()

extension Date { 

static func nextSevenDays() -> [Date]{
return Date.next(numberOfDays: 7, from: Date())
}

static func next(numberOfDays: Int, from startDate: Date) -> [Date]{
var dates = [Date]()
for i in 0..<numberOfDays {
if let date = Calendar.current.date(byAdding: .day, value: i, to: startDate) {
dates.append(date)
}
}
return dates
}
}

viewController内部设置一个数组来保存可能的日期并充当数据源

 class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 

@IBOutlet weak var datePicker: UIPickerView!

let availableDates: [Date] = {
return Date.nextSevenDays()
}

// You'll need a DateFormatter to 'pretty print' the dates to the pickerView labels.
lazy var dateFormatter: DateFormatter = {
let df = DateFormatter()
df.dateFormat = "EEEE, MMMM, dd, YYYY"
return df
}()

override func viewDidLoad() {
super.viewDidLoad()
self.datePicker.dataSource = self
self.datePicker.delegate = self
}

//Required Methods for UIPickerViewDataSource & UIPickerViewDelegate

func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return self.avaliableDates.count
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
let label = dateFormatter.string(from: avaliableDates[row])
return label
}

//Use this method to do work when a date is selected.
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

print(avaliableDates[row])
}

关于Swift 3 以编程方式设置日期选择器的日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51344982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com