【问题标题】:How to do validation on DatePicker?如何在 DatePicker 上进行验证?
【发布时间】:2018-10-23 04:22:03
【问题描述】:

我有**两个日期选择器从日期到日期还有两个时间选择器 从时间到时间在我的 ViewController 中。我想像**一样验证它 1. 如果from 和 until 日期相同,则 until 时间不小于 from 时间。

第二次应该大于或等于第一次。检查下面的代码,它在我的 ViewController 类中。

    @IBOutlet weak var fromCalender: UITextField!
@IBOutlet weak var fromTime: UITextField!

@IBOutlet weak var untilTheCalender: UITextField!
@IBOutlet weak var untilTheTime: UITextField!

var fromDatePicker = UIDatePicker()
var fromTimePicker = UIDatePicker()
var untilTheDatePicker = UIDatePicker()
var untilTheTimePicker = UIDatePicker()@IBAction func fromCalenderDatePicker(_ sender: UITextField) {
    fromDatePicker.datePickerMode = .date
    sender.inputView = fromDatePicker
    fromDatePicker.minimumDate = Calendar.current.date(byAdding: .year, value: 0, to: Date())
    fromDatePicker.addTarget(self, action: #selector(handleFromCalenderDatePicker(sender:)), for: .valueChanged)
}

@objc func handleFromCalenderDatePicker(sender: UIDatePicker) {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd MMM yyyy"
    fromCalender.text = dateFormatter.string(from: sender.date)
    untilTheDatePicker.minimumDate = sender.date
}

@IBAction func untilTheCalenderDatePicker(_ sender: UITextField) {
    untilTheDatePicker.datePickerMode = .date
    sender.inputView = untilTheDatePicker
    untilTheDatePicker.addTarget(self, action: #selector(untilTheCalenderDatePicker(sender:)), for: .valueChanged)
}

@objc func untilTheCalenderDatePicker(sender: UIDatePicker) {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd MMM yyyy"
    untilTheCalender.text = dateFormatter.string(from: sender.date)
}

@IBAction func fromTimePicker(_ sender: UITextField) {
    fromTimePicker.datePickerMode = .time
    sender.inputView = fromTimePicker
    fromTimePicker.addTarget(self, action: #selector(handleTimePicker(sender:)), for: .valueChanged)
}

@objc func handleTimePicker(sender: UIDatePicker) {
    let timeFormatter = DateFormatter()
    timeFormatter.dateStyle = .none
    timeFormatter.timeStyle = .short
    timeFormatter.dateFormat = "HH:mm"
    fromTime.text = timeFormatter.string(from: sender.date)
    untilTheDatePicker.minimumDate = sender.date
}

@IBAction func untilTheTimePicker(_ sender: UITextField) {
    untilTheTimePicker.datePickerMode = .time
    sender.inputView = untilTheTimePicker
    untilTheTimePicker.addTarget(self, action: #selector(handleUntilTheTimePicker(sender:)), for: .valueChanged)
}

@objc func handleUntilTheTimePicker(sender: UIDatePicker) {
    let timeFormatter = DateFormatter()
    timeFormatter.dateStyle = .none
    timeFormatter.timeStyle = .short
    timeFormatter.dateFormat = "HH:mm"
    untilTheTime.text = timeFormatter.string(from: sender.date)
}

请给我任何解决方案。

【问题讨论】:

  • 在 datePickerChanged 方法中更改 untilTheDatePicker 的最小日期。

标签: ios swift validation uidatepicker


【解决方案1】:

在第一个UIDatePicker 委托方法datePickerChanged 中,您可以将sender.date 用作第二个UIDatePickerminimumDate,还可以将默认minimumDate 添加到与第一个相同的第二个。

您的代码应该是这样的。

@objc func datePickerChanged(_ sender: UIDatePicker) {
fromCalender.text = dateFormatter.string(from: sender.date)

untilTheDatePicker. minimumDate = sender.date

}

对于.time 选择器使用相同的方法,因为Date() 已经包含时间组件。

所以只需添加.minimumDate = sender.date

【讨论】:

  • 我还展示了 24 小时时间选择器。我想要的时间选择器相同的条件。那么该怎么做呢。
  • 我可以看到您刚刚将 TimerPickers 添加到问题中
  • 我更新了我的答案,使用了与 Date() 相同的方法
猜你喜欢
  • 2014-10-08
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
相关资源
最近更新 更多