swift - 设置日期和时间不显示在 textField / Swift
问题描述
我创建了一个 UITextField 和一个 datePicker 作为 InputView。除了显示设置的日期和时间外,一切正常。
这是我的代码:
func setDatePickerAsInputView(target: Any, selector: Selector) {
let screenWidht = UIScreen.main.bounds.width
let datePicker = UIDatePicker(frame: CGRect(x: 0.0, y: 0.0, width: screenWidht, height: 300))
datePicker.datePickerMode = .dateAndTime
self.inputView = datePicker
let toolBar = UIToolbar(frame: CGRect(x: 0.0, y: 0.0, width: screenWidht, height: 30.0))
self.inputAccessoryView = toolBar
}
func setUpDateTextField() {
//DateTextField
dateTextField.layer.cornerRadius = 25
dateTextField.layer.borderWidth = 2
dateTextField.textAlignment = .center
self.dateTextField.setDatePickerAsInputView(target: self, selector: #selector(dateSelected))
dateTextField.translatesAutoresizingMaskIntoConstraints = false
dateTextField.widthAnchor.constraint(equalToConstant: 200).isActive = true
dateTextField.heightAnchor.constraint(equalToConstant: 80).isActive = true
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .short
dateTextField.text = formatter.string(from: datePicker.date)
}
@objc func dateSelected() {
if let datePicker = self.dateTextField.inputView as? UIDatePicker {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .short
self.dateTextField.text = dateFormatter.string(from: datePicker.date)
dateTextField.text = "\(datePicker.date)"
}
self.dateTextField.resignFirstResponder()
}
但是,如果我关闭 datePicker,它仍然是 TextField 中的当前(旧)日期,而不是我设置的日期和时间。有人可以帮助我吗?提前致谢!
解决方案
我已经更改了您代码中的某些代码行,请查看并尝试一下。我拿了一个文本字段,该文本字段的名称是txt_Date
@IBOutlet weak var txt_Date: UITextField!
在viewDidLoad调用下面的函数
func setUpDateTextField() {
//DateTextField
txt_Date.layer.cornerRadius = 25
txt_Date.layer.borderWidth = 2
txt_Date.textAlignment = .center
self.txt_Date.setDatePickerAsInputView(target: self, selector: #selector(opneDatePicker))
txt_Date.translatesAutoresizingMaskIntoConstraints = false
txt_Date.widthAnchor.constraint(equalToConstant: 200).isActive = true
txt_Date.heightAnchor.constraint(equalToConstant: 80).isActive = true
}
日期选择器的操作
@objc func opneDatePicker() {
if let datePicker = self.txt_Date.inputView as? UIDatePicker {
let dateformatter = DateFormatter()
dateformatter.dateStyle = .medium
dateformatter.dateFormat = "MMM d, yyyy HH:mm:ss"
self.txt_Date.text = dateformatter.string(from: datePicker.date)
}
self.txt_Date.resignFirstResponder() }
为了重用和减少 line 的代码,我对来自UITextField的 textfield 进行了扩展
extension UITextField {
func setDatePickerAsInputView(target: Any, selector: Selector) {
let screenWidht = UIScreen.main.bounds.width
let datePicker = UIDatePicker(frame: CGRect(x: 0.0, y: 0.0, width: screenWidht, height: 300))
if #available(iOS 14, *) {
datePicker.preferredDatePickerStyle = .wheels
datePicker.sizeToFit()
}
self.inputView = datePicker
let toolBar = UIToolbar(frame: CGRect(x: 0.0, y: 0.0, width: screenWidht, height: 44.0))
let barButton = UIBarButtonItem(title: "Done", style: .plain, target: target, action: selector)
toolBar.setItems([barButton], animated: false)
self.inputAccessoryView = toolBar
}}