我在文本字段中设置了一个日期选择器。为此,这就是我写的......(在TabItem
)
viewDidLoad
在 let datePicker = UIDatePicker()
datePicker.datePickerMode = UIDatePickerMode.date
datePicker.addTarget(self, action: #selector(AddDetailsViewController.theDatePickerValueChanged(sender:)), for: .valueChanged)
dateTimeTextfield.inputView = datePicker
之外我有这样的函数viewDidLoad
......
theDatePickerValueChanged
但现在发生的事情是当我点击文本字段时,datePicker出现了。但是如果我想在文本字段中设置当前日期,那么我必须从datePicker上的当前日期向前或向后移动,然后再次返回到当前日期。
但我想要的是当datePicker出现时,它上面的当前日期应直接设置在文本字段上,而不需要从当前日期前进或后退。我怎样才能做到这一点......?
答案 0 :(得分:2)
您可以实现文本字段委托方法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
。
答案 1 :(得分:1)
实施UITextFieldDelegate
方法textFieldShouldBeginEditing
并调用您的函数theDatePickerValueChanged
,如下所示:
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if dateTimeTextfield.text!.isEmpty {
theDatePickerValueChanged(sender: UIDatePicker())
}
return true
}
在dateTimeTextfield.delegate = self
viewDidLoad
答案 2 :(得分:1)
设置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())
}
}