从文本字段上的日期选择器设置当前日期
Set current date from datepicker on textfield
我正在文本字段上设置日期选择器。为此,这就是我写的..(在 viewDidLoad
)
let datePicker = UIDatePicker()
datePicker.datePickerMode = UIDatePickerMode.date
datePicker.addTarget(self, action: #selector(AddDetailsViewController.theDatePickerValueChanged(sender:)), for: .valueChanged)
dateTimeTextfield.inputView = datePicker
在 viewDidLoad
之外,我有这样的函数 theDatePickerValueChanged
...
@objc func theDatePickerValueChanged(sender: UIDatePicker) {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .medium
dateTimeTextfield.text = formatter.string(from: sender.date)
}
但是现在发生的事情是当我点击文本字段时,datePicker 出现了。但是如果我想在文本字段上设置当前日期,那么我必须从 datePicker 上的当前日期向前或向后移动,然后再次 return 到当前日期。
但我想要的是当 datePicker 出现时,它的当前日期应该直接设置在文本字段上,而不需要我从当前日期向前或向后移动。我怎样才能做到这一点...?
您可以实现文本字段委托方法 textFieldShouldBeginEditing:
并且在该委托方法中您需要这样做...
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if dateTimeTextfield.text!.isEmpty {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .medium
dateTimeTextfield.text = formatter.string(from: Date())
}
return true
}
别忘了设置dateTimeTextfield.delegate = self
。
实施 UITextFieldDelegate
方法 textFieldShouldBeginEditing
并调用您的函数 theDatePickerValueChanged
,如下所示:
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if dateTimeTextfield.text!.isEmpty {
theDatePickerValueChanged(sender: UIDatePicker())
}
return true
}
在viewDidLoad
中设置dateTimeTextfield.delegate = self
设置 UITextFieldDelegate 并使用 textFieldDidBeginEditing
.
//Set delegate
dateTimeTextfield.delegate = self
// UITextFieldDelegate method
func textFieldDidBeginEditing(_ textField: UITextField) -> void {
if textField.text == nil || textField.text!.isEmpty {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .medium
textField.text = formatter.string(from: Date())
}
}
我正在文本字段上设置日期选择器。为此,这就是我写的..(在 viewDidLoad
)
let datePicker = UIDatePicker()
datePicker.datePickerMode = UIDatePickerMode.date
datePicker.addTarget(self, action: #selector(AddDetailsViewController.theDatePickerValueChanged(sender:)), for: .valueChanged)
dateTimeTextfield.inputView = datePicker
在 viewDidLoad
之外,我有这样的函数 theDatePickerValueChanged
...
@objc func theDatePickerValueChanged(sender: UIDatePicker) {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .medium
dateTimeTextfield.text = formatter.string(from: sender.date)
}
但是现在发生的事情是当我点击文本字段时,datePicker 出现了。但是如果我想在文本字段上设置当前日期,那么我必须从 datePicker 上的当前日期向前或向后移动,然后再次 return 到当前日期。
但我想要的是当 datePicker 出现时,它的当前日期应该直接设置在文本字段上,而不需要我从当前日期向前或向后移动。我怎样才能做到这一点...?
您可以实现文本字段委托方法 textFieldShouldBeginEditing:
并且在该委托方法中您需要这样做...
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if dateTimeTextfield.text!.isEmpty {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .medium
dateTimeTextfield.text = formatter.string(from: Date())
}
return true
}
别忘了设置dateTimeTextfield.delegate = self
。
实施 UITextFieldDelegate
方法 textFieldShouldBeginEditing
并调用您的函数 theDatePickerValueChanged
,如下所示:
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if dateTimeTextfield.text!.isEmpty {
theDatePickerValueChanged(sender: UIDatePicker())
}
return true
}
在viewDidLoad
dateTimeTextfield.delegate = self
设置 UITextFieldDelegate 并使用 textFieldDidBeginEditing
.
//Set delegate
dateTimeTextfield.delegate = self
// UITextFieldDelegate method
func textFieldDidBeginEditing(_ textField: UITextField) -> void {
if textField.text == nil || textField.text!.isEmpty {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .medium
textField.text = formatter.string(from: Date())
}
}