在 DatePicker-swift 中限制小时和分钟?
Posted
技术标签:
【中文标题】在 DatePicker-swift 中限制小时和分钟?【英文标题】:Restricting hours and minutes in DatePicker- swift? 【发布时间】:2021-01-21 00:27:51 【问题描述】:大家好,我正在尝试创建一个时间选择器,其小时仅从(下午 2 点到晚上 9 点)开始,分钟增加 30 this is the picture of timePicker that i want to create 这是我的代码
func creatTimePicker()
timePicker.datePickerMode = .time
timePicker.minuteInterval = 30
let timeformatter = DateFormatter()
timeformatter.dateFormat = "HH:mm"
let min = timeformatter.date(from: "5:00")
let max = timeformatter.date(from: "9:00")
timePicker.minimumDate = min
timePicker.maximumDate = max
self.contentView.addSubview(timePicker)
问题是小时从 1-12 开始,分钟从 00-59 开始有什么问题?谢谢
【问题讨论】:
设置 minimumDate "14:00" 和 maximumDate "21:00",试试这个。 没用 :( 【参考方案1】:问题是您还需要设置日期选择器日期属性以匹配最小日期。您还需要将日期格式化程序的默认日期设置为今天,并且在解析日期字符串时间时不要忘记将语言环境设置为“en_US_POSIX”:
extension Formatter
static let time: DateFormatter =
let formatter = DateFormatter()
formatter.locale = .init(identifier: "em_US_POSIX")
formatter.dateFormat = "HH:mm"
return formatter
()
let timePicker = UIDatePicker()
func creatTimePicker()
Formatter.time.defaultDate = Calendar.current.startOfDay(for: Date())
let minimumDate = Formatter.time.date(from: "14:00")!
let maximumDate = Formatter.time.date(from: "21:00")!
timePicker.date = minimumDate
timePicker.datePickerMode = .time
timePicker.minuteInterval = 30
timePicker.minimumDate = minimumDate
timePicker.maximumDate = maximumDate
self.contentView.addSubview(timePicker)
【讨论】:
感谢 Leo 的帮助,但我如何才能仅显示 5-9 小时?? 什么意思?minuteInterval = 60
并更改 minimumDate
和 maximumDate
【参考方案2】:
你可以使用Calendar
来限制UIDatePicker()的时间范围
let picker = UIDatePicker()
picker.datePickerMode = .time
let minDate = Calendar.current.date(bySettingHour: 14, minute: 0, second: 0, of: Date()) // 2PM
let maxDate = Calendar.current.date(bySettingHour: 21, minute: 0, second: 0, of: Date()) // 9PM
picker.minimumDate = minDate
picker.maximumDate = maxDate
这不会让用户选择指定时间范围之外的时间。
如果您只想显示这些时间
你可以使用UIPickerView
示例:
let picker = UIPickerView()
picker.dataSource = self
picker.delegate = self
let hoursRange = Array(5...9)
// Data source
func numberOfComponents(in: UIPickerView) -> Int
return 2
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
print("Com :\(component)")
if component == 0
return hoursRange.count
return 1 // For the PM indicator
// Delegate
func pickerView(_ pickerView: UIPickerView,
titleForRow row: Int,
forComponent component: Int) -> String?
switch component
case 0:
return "\(hoursRange[row])"
case 1:
return "AM"
default:
return nil
【讨论】:
非常感谢您的帮助,我现在唯一考虑的是显示 5-9 的时间范围。上述功能仅启用 5-9 小时,但仍显示 1-12 ! ? 您必须使用从 5-9 手动添加的组件行来创建UIPickerView
。否则,您无法将它们隐藏在UIDatePicker
以上是关于在 DatePicker-swift 中限制小时和分钟?的主要内容,如果未能解决你的问题,请参考以下文章
添加约束以将电池循环限制为每 24 小时 1 次充电和 1 次放电
Firestore限制每小时或每天读写一次,以防止用户在检查器中设置计时器
如何在 Laravel 中将每个用户的数据库字段更新限制为 24 小时一次