-1
votes

Impossible de convertir une chaîne en date pour DatePicker

J'essaie d'obtenir une chaîne de Textfield, puis de le convertir en jour et de mettre cette valeur à DatePicker. Mais pour une raison quelconque, il échoue à chaque fois que je reçois: "Il y a un problème à DateFormatter. Naviguez pas en mesure de convertir une chaîne à ce jour".

Je ne comprends pas ce que je fais mal et que je reçois ces travaux. P>

Mon code: P>

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var DOBTextField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    DOBTextField.addInputViewDatePicker(target: self, selector: #selector(doneButtonPressed), textFieldText: DOBTextField.text)
}

@objc func doneButtonPressed() {
    if let  datePicker = self.DOBTextField.inputView as? UIDatePicker {
        let dateFormatter = DateFormatter()
        dateFormatter.dateStyle = .long
        dateFormatter.timeStyle = .none
        self.DOBTextField.text = dateFormatter.string(from: datePicker.date)
    }
    self.DOBTextField.resignFirstResponder()
 }
}


 extension UITextField {

   func addInputViewDatePicker(target: Any, selector: Selector , textFieldText: String?) {


    let screenWidth = UIScreen.main.bounds.width

    let datePicker = UIDatePicker(frame: CGRect(x: 0, y: 0, width: screenWidth, height: 216))
    datePicker.datePickerMode = .date
    self.inputView = datePicker

    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .long
    dateFormatter.timeStyle = .none

    if textFieldText != nil {
        if let date = dateFormatter.date(from: textFieldText!) {
            datePicker.date = date
        } else {
        print("There is issue in dateformatter. Not able to convert string to Date ")
        }
      }
     else {
      datePicker.date = Date()
    }


    //Add Tool Bar as input AccessoryView
    let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: screenWidth, height: 44))
    let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    let cancelBarButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelPressed))
    let doneBarButton = UIBarButtonItem(title: "Done", style: .plain, target: target, action: selector)
    toolBar.setItems([cancelBarButton, flexibleSpace, doneBarButton], animated: false)

    self.inputAccessoryView = toolBar
 }

   @objc func cancelPressed() {
     self.resignFirstResponder()
   }
}


5 commentaires

Salut @ucelme, pouvez-vous imprimer et partager textfieldtext Valeur dans addInpuViewDatePicker ?


"19 mars 2019"


Vous devez définir datformat pour votre objet datationPicker, utilisez simplement dateformater.dateformat = "mmm dd, aaaa" après DateFormatter = DateFormatter () Méthode d'extension


J'ai essayé, mais je reçois nil et crash. Je pense que lorsque j'utilise datformatestyle.datestyle = .long et dateformattern.tmestyle = .none, je n'ai pas besoin de dateformatter.dateFormat.


Peut être spécifique que la date de date vous souhaite utiliser ?? Vérifiez ici vos formats de date Nsdateformatter.com


3 Réponses :


1
votes

Comme je le vois lorsque vous appelez addInpuViewAtAtViewatePicker sur ViewDiDload , la valeur de textfieldtext est "" c'est pourquoi c'est pourquoi c'est pourquoi c'est pourquoi Vous voyez votre impression à partir du démarrage

Vous pouvez essayer d'utiliser ce code (mais, je suppose, vous pouvez l'optimiser): xxx


1 commentaires

J'ai essayé votre code, mais j'ai dayspicker.date = date () et pas la valeur de DatePicker de Textfield.



0
votes

Vous pouvez le faire en suivez mon code ci-dessous.

@objc func doneButtonPressed() {
   //Converting string to date
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm"
    let date = dateFormatter.date(from: DOBTextField.text!)

    //Sets the date in the date picker
    datepicker.setDate(date!, animated: true)
}


0 commentaires

0
votes

a résolu cette question. Je me débarrasse de l'extension et d'écrire du code pour DatePicker dans ViewController. XXX PRE>

Après que j'ai ajouté à viewillappear valeurs réelles de DatePicker: P>

   override func viewWillAppear(_ animated: Bool) {

                let dateFormatter = DateFormatter()
                dateFormatter.dateStyle = .long
                dateFormatter.timeStyle = .none
                datePicker.date = dateFormatter.date(from: textfield.text!)!
    }


0 commentaires