【问题标题】:iOS Swift - Set Start Time and End Time (Fututre Time only) UIDatePickeriOS Swift - 设置开始时间和结束时间(仅限未来时间)UIDatePicker
【发布时间】:2018-03-02 05:53:06
【问题描述】:

我想做一个员工考勤应用。我有两个时间选择器,我使用 UIDatePickerMode.time。第一个时间选择器供用户选择开始时间,第二个时间选择器用于完成时间,

示例:开始时间:上午 8:00,结束时间:下午 5:00。

如何将第二个时间选择器设置为仅允许选择上午 8:01 以后的时间?所以用户将无法选择更早的时间,而只能选择未来的时间,

示例:开始时间:上午 8:00,结束时间:上午 7:00。我该如何避免这种情况?

请帮忙。谢谢。

【问题讨论】:

    标签: ios swift date time datepicker


    【解决方案1】:

    您可以在第一个选择器中选择行后立即在UIPickerViewDelegate 方法中更新第二个选择器的数据:

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if pickerView == startPicker {
            // update endPicker.minimumDate
            endPicker.minimumDate = Calendar.current.date(byAdding: .minute, value: 1, to: pickerView.date)
            // don't forget to add some checks (for example if your startPicker time is set to 23:59)
        }
    }
    

    更新:

    对于UIDatePicker(不是UIPickerView):

    startPicker.addTarget(self, action: #selector(datePickerValueChanged(_:)), for: .valueChanged)
    

    并且在方法中做类似的事情

    func datePickerValueChanged(_ datePicker: UIDatePicker) {
        endPicker.minimumDate = Calendar.current.date(byAdding: .minute, value: 1, to: datePicker.date)
        // don't forget to add some checks (for example if your startPicker time is set to 23:59)
    }
    

    【讨论】:

    • 您好,Aleksandr,感谢您的回复。我使用的是 UIDatePicker 而不是 UIPickerView。而且它没有委托方法。使用 UIDatePicker 还有另一种方法吗?如果不可能,我想我将不得不使用 UIPickerView 显示时间并使用您的代码设置最短时间。非常感谢。
    • @TSM 对不起我的错误。我已经更新了我的答案。希望对您有所帮助!