【问题标题】:(Swift) Assign UIDatePicker selected date to UITextField(Swift) 将 UIDatePicker 选择的日期分配给 UITextField
【发布时间】:2019-11-23 15:51:53
【问题描述】:

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

doneClicked 函数可能是一个值得关注的地方。当我最初创建它时,它前面没有 (@objc),它给了我一个错误。

/'#selector' 的参数是指实例方法doneClicked() 不暴露给Objective-C/

所以我添加了 (@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
    }

}

【问题讨论】:

    标签: ios swift google-cloud-firestore uitextfield uidatepicker


    【解决方案1】:

    您没有在 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
      }
    

    【讨论】:

    • 这太完美了,非常感谢!既然已经指出,我当然应该将代码添加到 doneClicked 函数中。真的很感激这个人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    相关资源
    最近更新 更多