web-dev-qa-db-fra.com

Swift: utiliser UIDatePicker comme entrée UITextFieldView ne se met pas à jour

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)
}
18
agf119105

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)
}
52
Ashley Mills

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)
}
1
Anees Kodappana