(Swift) 将 UIDatePicker 选定的日期分配给 UITextField
(Swift) Assign UIDatePicker selected date to UITextField
首先让我说明您看到的除 UIDatePicker 之外的所有其他代码都可以正常工作。现在,当我单击 dateTextField 时,UIDatePicker
出现,我可以 select 一个日期,但是当我单击完成按钮时,日期 selected 不在 UITextField
中分配给它。
一个可能值得关注的地方是 doneClicked 函数。当我最初创建它时,它前面没有 (@objc),它给了我一个错误。
/“#selector”的参数指的是实例方法 doneClicked()
未暴露给 Objective-C/
所以我添加了 (@objc),错误消失了,但是如上所述,从 UIDatePicker
编辑的日期 select 没有保存在 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
在doneClicked中点击,获取datePicker的日期表单并赋值给dateTextField。
代码:
@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
}
首先让我说明您看到的除 UIDatePicker 之外的所有其他代码都可以正常工作。现在,当我单击 dateTextField 时,UIDatePicker
出现,我可以 select 一个日期,但是当我单击完成按钮时,日期 selected 不在 UITextField
中分配给它。
一个可能值得关注的地方是 doneClicked 函数。当我最初创建它时,它前面没有 (@objc),它给了我一个错误。
/“#selector”的参数指的是实例方法 doneClicked()
未暴露给 Objective-C/
所以我添加了 (@objc),错误消失了,但是如上所述,从 UIDatePicker
编辑的日期 select 没有保存在 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
在doneClicked中点击,获取datePicker的日期表单并赋值给dateTextField。
代码:
@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
}