(Swift) 将 UIDatePicker 选定日期分配给 UITextField



首先,让我说明您看到的除UIDatePicker之外的所有其他代码都可以正常工作。现在,当我单击dateTextField时,UIDatePicker显示,我可以选择一个日期,但是当我单击"完成"按钮时,所选日期不在分配给它的UITextField中。

一个可能成为焦点的领域是doneClicked函数。当我最初创建它时,它前面没有(@objc(,它给了我一个错误。

/#selector"的参数是指未向 Objective-C 公开的实例方法doneClicked()/

所以我添加了(@objc(并且错误消失了,但如上所述,从UIDatePicker中选择的日期未保存在UITextField中。

如果您愿意解释并展示我的代码错误在哪里以及如何修复它。

非常感谢您在这件事上的任何帮助。

import Foundation
import UIKit
import Firebase
import FirebaseUI
class TrainViewController: UIViewController{
@IBOutlet weak var trainField: UITextField!
@IBOutlet weak var locationField: UITextField!
@IBOutlet weak var engineField: UITextField!
@IBOutlet weak var dateTextField: UITextField!
let datePicker = UIDatePicker()
@IBAction func saveButton(_ sender: UIButton) {
    self.saveText()
    trainField.text?.removeAll()
    locationField.text?.removeAll()
    engineField.text?.removeAll()
    dateTextField.text?.removeAll()
     self.view.endEditing(true)
}
override func viewDidLoad() {
    super.viewDidLoad()
    createDatePicker()
}
   func saveText() {
    let trainText = self.trainField.text!
    let locationText = self.locationField.text!
    let engineText = self.engineField.text!
    let dateStart = self.dateTextField.text!
let db = Firestore.firestore()
let dict = ["train_text": trainText,
            "location_text": locationText,
            "engine_text": engineText,
            "dateStart_text": dateStart]
db.collection("users").addDocument(data: dict)
   }
func createDatePicker(){
    //format the display of our datepicker
    datePicker.datePickerMode = .date
    //assign date picker to our textfield
    dateTextField.inputView = datePicker
    //create a toolbar
    let toolbar = UIToolbar()
    toolbar.sizeToFit()
    //add a done button on this toolbar
    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(doneClicked))
    toolbar.setItems([doneButton], animated: true)
    dateTextField.inputAccessoryView = toolbar
}
@objc func doneClicked(){
    //format the date display in textfield
    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .medium
    dateFormatter.timeStyle = .none
  }
}
extension TrainViewController : UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
}

您没有在textFiled中分配日期。

喜欢 : dateTextField.text = dateString

在完成单击单击中,获取日期表单日期选择器并分配给日期文本字段。

法典:

@objc func doneClicked(){
    //format the date display in textfield
    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .medium
    dateFormatter.timeStyle = .none
    let dateString = dateFormatter.stringFromDate(datePicker.date)
    print(dateString)
    dateTextField.text = dateString
  }

最新更新