簡體   English   中英

(Swift) 將 UIDatePicker 選擇的日期分配給 UITextField

[英](Swift) Assign UIDatePicker selected date to 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

在 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
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM