gpt4 book ai didi

ios - UIDatePicker - 允许在两个范围内选择时间

转载 作者:行者123 更新时间:2023-11-28 13:24:35 25 4
gpt4 key购买 nike

在我们的应用程序中,我们有一个 UIDatePicker , 设置为模式 Time .此日期选择器用于让用户选择外卖订单的时间。

外卖订单只能在每天的特定时间范围内发出,为此我们使用属性 minimumDatemaximumDate .现在我们想要让用户可以在两个不同的范围内选择一个时间。比方说,允许订单 09:00 - 12:0013:00 - 17:00 ,选择器应该只允许选择这些时间。

据我所知,这在默认情况下是不可能的,因为我现在使用的属性只是单一时间对象,而不是范围。解决方案可能是手动实现,但似乎没有 delegate适用于 UIDatePicker .

我想知道的是,有人知道一个好的、干净的方法来实现这些功能,同时仍然使用 UIDatePicker ,而不是 UIPickerView .

如果它有一个委托(delegate)方法,例如 canSelectDate(_:) -> Bool,那将是一个不错的选择。 ,如果false,它会将其动画回以前的值.在这里,我可以使用范围来确定它。

最佳答案

你可以像这样对选择器的变化使用react:

picker.addTarget(self, action: #selector(MyViewController.pickerChanged), for: .valueChanged)

然后你的函数看起来像这样:

@objc
private func pickerChanged(_ picker: UIDatePicker) {
let dateIsAtLunchtime = picker.date >= lunchStart && picker.date <= lunchEnd
if dateIsAtLunchtime {
picker.setDate(lunchEnd, animated: true)
}
}

如果您的日期定义如下:

let morningComponents = DateComponents(calendar: .current, hour: 8, minute: 0)
var morning: Date { return morningComponents.date ?? Date() }
let lunchStartComponents = DateComponents(calendar: .current, hour: 12, minute: 30)
var lunchStart: Date { return lunchStartComponents.date ?? Date() }
let lunchEndComponents = DateComponents(calendar: .current, hour: 14, minute: 30)
var lunchEnd: Date { return lunchEndComponents.date ?? Date() }
let eveningComponents = DateComponents(calendar: .current, hour: 18, minute: 0)
var evening: Date { return eveningComponents.date ?? Date() }

关于ios - UIDatePicker - 允许在两个范围内选择时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58604543/

25 4 0
文章推荐: ios - QRcode 扫描后我的解雇不起作用怎么办?
文章推荐: ios - 当 react native 应用程序 View 加载时,如何在 native ios 上调用 ViewController 类?
文章推荐: css - 使用 css 减少
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com