【发布时间】:2017-01-06 18:47:46
【问题描述】:
在下面的代码中,我实现了一个日期选择器作为我的文本字段的子视图。我被困在这个功能上; '验证年龄'。函数中的 if 语句工作正常,当日期选择器日期高于或低于指定日期时,它将更改 textField 颜色。但它只适用于相应的年份,但不适用于确切的日期。过去两天我一直在尝试搜索,但找不到解决我确切问题的方法。
class AgeConfirmViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var txtAgeConfirmation: UITextField!
let datePicker: UIDatePicker = UIDatePicker()
override func viewDidLoad() {
super.viewDidLoad()
txtAgeConfirmation.delegate = self
createDatePicker()
}
func textFieldDidBeginEditing(_ textField: UITextField) {
txtAgeConfirmation.inputView = datePicker
datePicker.addTarget(self, action: #selector(self.datePickerChanged(sender:)), for: .valueChanged)
}
func datePickerChanged(sender: UIDatePicker) {
let formatter = DateFormatter()
formatter.timeStyle = .none
formatter.dateStyle = .long
txtAgeConfirmation.text = formatter.string(from: sender.date)
verifyAge()
}
func createDatePicker() {
datePicker.datePickerMode = .date
datePicker.maximumDate = Calendar.current.date(byAdding: .year, value: 0, to: Date())
}
func verifyAge() {
let dateOfBirth = datePicker.date
let today = Date()
let gregorian = NSCalendar(identifier: NSCalendar.Identifier.gregorian)
let age = gregorian?.components([.month, .day, .year], from: dateOfBirth, to: today, options:[])
if (age?.year)! < 21 {
txtAgeConfirmation.textColor = UIColor.red
} else if (age?.year)! > 21 {
txtAgeConfirmation.textColor = UIColor.black
}
}
【问题讨论】:
-
请澄清您是否需要将其保留到当天。这意味着如果年龄是 19 岁 11 小时 59 岁,他们不会在 20 岁时吃肉。相反,你得到的是他们今年是否 20 岁但还不是 20 岁。
-
已澄清。 '它只适用于相应的年份,但不适用于确切的日期'。我希望它是在确切的日子是的。
标签: ios swift swift3 datepicker