ios - Swift:如何制作显示日期和时间范围的 uipickerview
问题描述
我可以显示时间并更改时间间隔,但我不知道如何获得如下图所示日期的时间范围,除非我对其进行硬编码。如果我不需要的话,尽量避免使用任何可可足类动物。现在我正在对其进行硬编码,但只有时间,如果没有另一个UIPicker
.
与问题相关的代码UIPickerView
:
private var deliveryTimesPicker = UIPickerView()
private var deliveryTimes = ["10 AM - 11 AM", "11 AM - 12 PM", "12 PM - 1 PM", "1 PM - 2 PM", "2 PM - 3 PM", "3 PM - 4 PM", "4 PM - 5 PM", "5 PM - 6 PM", "6 PM - 7 PM", "7 PM - 8 PM", "8 PM - 9 PM", "9 PM - 10 PM", "10 PM - 11 PM"]
private var selectedDeliveryTime = 0
override func viewDidLoad() {
...
self.deliveryTimeTF.text = self.deliveryTimes.first!
self.doneToolbar.barStyle = .default
self.doneToolbar.isTranslucent = true
self.doneToolbar.isUserInteractionEnabled = true
self.doneToolbar.setItems([
UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(self.dismissKeyboard)),
UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil),
UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(self.pickerViewDone))
], animated: true)
self.doneToolbar.sizeToFit()
self.deliveryTimesPicker.delegate = self
self.deliveryTimesPicker.dataSource = self
self.deliveryTimesPicker.tag = 0
self.deliveryTimesPicker.selectRow(self.selectedDeliveryTime, inComponent: 0, animated: true)
self.deliveryTimeTF.inputView = self.deliveryTimesPicker
self.deliveryTimeTF.inputAccessoryView = self.doneToolbar
}
@objc func pickerViewDone() {
if self.deliveryTimeTF.isEditing {
self.deliveryTimeTF.text = self.deliveryTimes[self.selectedDeliveryTime]
}
dismissKeyboard()
}
extension RequestViewController: UIPickerViewDelegate {
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView.tag == 0 {
self.selectedDeliveryTime = row
return self.deliveryTimes[self.selectedDeliveryTime]
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView.tag == 0 {
self.selectedDeliveryTime = row
}
}
}
我的怎么样:
解决方案
除非我对其进行硬编码,否则我不知道如何获得如下图所示日期的时间范围。
然后你应该阅读Date
, DateInterval
,DateComponents
等。选择一个开始日期并使用它来生成一个开始日期和结束日期对的列表。这是一些伪代码:
let start = Date()
var timeframes = (Date,Date)[]
for i in (0..9) {
let t1 = Date(timeInterval: (i * secondsBetweenStarts) since:start)
let t2 = Date(timeInterval: timeFrameDuration since:t1)
let timeframe = (t1, t2)
timeframes.append(timeframe)
}
当然,您必须填写secondsBetweenStarts
和timeFrameDuration
的值。还有很多其他的方法来构建日期——例如,使用日期组件可以很容易地创建在小时边界开始和结束的时间段。无论如何,这个想法只是创建一个开始和结束时间的数组。从那里应该很容易生成描述这些时间范围的字符串列表,您可以在选择器中使用该字符串列表。
推荐阅读
- java - 如何在单击按钮时自动调整背景颜色?
- javascript - 从javascript函数执行得到错误的计算
- php - 从wordpress中的作者搜索中获取所有帖子
- java - Spring Data Rest Put 未在 SpringBoot 2.1.x 上使用不可变实体进行更新
- powerbi - 根据不同计数计算价格
- mongodb - 数组中的匹配数组过滤器未提供所需结果
- command-line - 从“p4 add”添加的文件未显示在 p4v 默认更改列表中
- winapi - 如何在 MFC 中增加 ComboBox 项的长度
- javascript - 如何在html页面报告上显示每个屏幕的百分比计算
- android - 没有为模型配置 python 解释器