限制DatePicker-swift中的小时和分钟?

限制DatePicker-swift中的小时和分钟?,swift,uidatepicker,Swift,Uidatepicker,嗨,伙计们,我正在尝试创建一个时间选择器,它的时间从(下午2点到9点)开始,每分钟递增30分钟 这是我的密码 func creatTimePicker() { timePicker.datePickerMode = .time timePicker.minuteInterval = 30 let timeformatter = DateFormatter() timeformatter.dateFormat = "HH:m

嗨,伙计们,我正在尝试创建一个时间选择器,它的时间从(下午2点到9点)开始,每分钟递增30分钟 这是我的密码

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开始。问题是什么?谢谢

您可以使用
日历
来约束UIDatePicker()的时间范围

let picker=UIDatePicker()
picker.datePickerMode=.time
让minDate=Calendar.current.date(通过设置小时:14,分钟:0,秒:0,of:date())//2PM
让maxDate=Calendar.current.date(通过设置小时:21,分钟:0,秒:0,of:date())//9PM
picker.minimumDate=minDate
picker.maximumDate=maxDate
这将不允许用户选择指定时间范围之外的时间

如果你只想在这几个小时内 您可以使用
UIPickerView

示例:

let picker=UIPickerView()
picker.dataSource=self
picker.delegate=self
设hoursRange=Array(5…9)
//数据源
func numberOfComponents(in:UIPickerView)->Int{
返回2
}
func pickerView(pickerView:UIPickerView,numberOfRowsInComponent:Int)->Int{
打印(“Com:\(组件)”)
如果组件==0{
return hoursRange.count
}
为PM指示器返回1//
}
//委派
func pickerView(pickerView:UIPickerView,
标题箭头行:Int,
forComponent:Int)->字符串?{
开关元件{
案例0:
返回“\(小时范围[行])
案例1:
返回“AM”
违约:
归零
}
}

问题在于,您需要将日期选择器日期属性设置为与最小日期匹配。您还需要将日期格式化程序的默认日期设置为今天,并且在解析日期字符串时间时,不要忘记将区域设置设置为“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
    }()
}


设置minimumDate“14:00”和maximumDate“21:00”,尝试此操作。无效:(非常感谢您的帮助。我现在考虑的唯一一件事是仅显示5-9的小时范围。上面的函数仅启用5-9小时,但仍显示1-12!!?您必须使用从5-9手动添加的组件行创建
UIPickerView
。否则,您无法将它们隐藏在
UIDatePicker
中>谢谢你的帮助,Leo,但是我怎么能只显示5-9小时?你是什么意思?
minuteInterval=60
并更改
minimumDate
maximumDate
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)
}