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() } }
3 Réponses :
Comme je le vois lorsque vous appelez Vous pouvez essayer d'utiliser ce code (mais, je suppose, vous pouvez l'optimiser): p> addInpuViewAtAtViewatePicker code> sur
ViewDiDload code>, la valeur de
textfieldtext code> est
"" code> c'est pourquoi c'est pourquoi c'est pourquoi c'est pourquoi Vous voyez votre impression à partir du démarrage
J'ai essayé votre code, mais j'ai dayspicker.date = date () et pas la valeur de DatePicker de Textfield.
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) }
a résolu cette question. Je me débarrasse de l'extension et d'écrire du code pour DatePicker dans ViewController. 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!)!
}
Salut @ucelme, pouvez-vous imprimer et partager
textfieldtext code> Valeur dans
addInpuViewDatePicker code>?
"19 mars 2019"
Vous devez définir
datformat code> pour votre objet datationPicker, utilisez simplement
dateformater.dateformat = "mmm dd, aaaa" code> après
DateFormatter = DateFormatter () Code> 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