Dalam kode saya di bawah ini saya telah menerapkan pemilih tanggal untuk menjadi subview dari bidang teks saya. Saya terjebak pada fungsinya; 'verifikasiUsia'. Pernyataan if dalam fungsi berfungsi dengan baik dan akan mengubah warna bidang teks ketika tanggal Pemilih Tanggal di atas atau di bawah tanggal yang ditentukan. Tapi itu hanya bekerja pada tahun yang bersangkutan Tapi tidak Bekerja pada hari yang tepat. Saya telah mencoba mencari selama dua hari terakhir dan tidak dapat menemukan solusi untuk masalah saya yang sebenarnya.
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
}
}