J'ai un champ de texte et lorsqu'il est sélectionné, un sélecteur de date apparaît à la place d'un clavier, mais il ne se met à jour qu'avec la date d'aujourd'hui la première fois. L'utilisateur modifie la date, mais le champ de texte ne poursuit pas la mise à jour. Quel est le problème?
Voici comment j'appelle le Datepicker et contrôle la date entrée dans mon champ de texte:
@IBAction func dp(sender: UITextField) {
var DatePickerView : UIDatePicker = UIDatePicker()
DatePickerView.datePickerMode = UIDatePickerMode.Date
textfieldjobdate.inputView = DatePickerView
DatePickerView.addTarget(self, action: Selector("handleDatePicker"), forControlEvents: UIControlEvents.ValueChanged)
}
func handleDatePicker() {
var DatePickerView : UIDatePicker = UIDatePicker()
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd MMM yyyy"
textfieldjobdate.text = dateFormatter.stringFromDate(DatePickerView.date)
}
Votre méthode handleDatePicker
instancie un nouveau DatePicker
à chaque appel. Vous devez ajouter un paramètre à la fonction pour passer l'expéditeur (le DatePicker
créé dans func dp
)
@IBAction func dp(_ sender: UITextField) {
let datePickerView = UIDatePicker()
datePickerView.datePickerMode = .date
sender.inputView = datePickerView
datePickerView.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged)
}
@objc func handleDatePicker(sender: UIDatePicker) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd MMM yyyy"
textfieldjobdate.text = dateFormatter.string(from: sender.date)
}
Version Swift 4.2
@IBAction func onEditDob(_ sender: UITextField) {
let datePickerView = UIDatePicker()
datePickerView.datePickerMode = .date
sender.inputView = datePickerView
datePickerView.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged)
}
@objc func handleDatePicker(sender: UIDatePicker) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd MMM yyyy"
dob.text = dateFormatter.string(from: sender.date)
}