简体   繁体   English

在文本字段上通过日期选择器设置当前日期

[英]Set current date from datepicker on textfield

I'm setting a datepicker on a textfield. 我正在文本字段上设置日期选择器。 For that this is what I've written..(in viewDidLoad ) 为此,这就是我写的..(在viewDidLoad

    let datePicker = UIDatePicker()
    datePicker.datePickerMode = UIDatePickerMode.date
    datePicker.addTarget(self, action: #selector(AddDetailsViewController.theDatePickerValueChanged(sender:)), for: .valueChanged)
    dateTimeTextfield.inputView = datePicker

And outside viewDidLoad I have the function theDatePickerValueChanged given like so... viewDidLoad之外,我像下面这样给定了theDatePickerValueChanged函数。

@objc func theDatePickerValueChanged(sender: UIDatePicker) {
    let formatter = DateFormatter()
    formatter.dateStyle = .medium
    formatter.timeStyle = .medium
    dateTimeTextfield.text = formatter.string(from: sender.date)
}

But now what happens is when I tap on the textfield, the datePicker comes up. 但是现在发生的是,当我点击文本字段时,出现了datePicker。 But if I want the current date to be set on the textfield, then I have to move forward or backward from the current date on the datePicker and then again return to that current date. 但是,如果要在文本字段上设置当前日期,则必须从datePicker上的当前日期向前或向后移动,然后再次返回该当前日期。

But what I want is when the datePicker comes up, the current date on it should be directly set on the textfield without me requiring to go forward or backwards from the current date. 但是我想要的是当datePicker出现时,它的当前日期应该直接在文本字段上设置,而无需我从当前日期前进或后退。 How can I achieve this...? 我该如何实现...?

You can implement text field delegate method textFieldShouldBeginEditing: and in that delegate method you need to do like this... 您可以实现文本字段委托方法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
}

Don't forgot to set dateTimeTextfield.delegate = self . 不要忘记设置dateTimeTextfield.delegate = self

Implement UITextFieldDelegate method textFieldShouldBeginEditing and call your function theDatePickerValueChanged like below: 实现UITextFieldDelegate方法textFieldShouldBeginEditing并调用函数theDatePickerValueChanged如下所示:

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {

    if dateTimeTextfield.text!.isEmpty {
        theDatePickerValueChanged(sender: UIDatePicker())
    }
    return true
}

Set dateTimeTextfield.delegate = self in viewDidLoad viewDidLoad设置dateTimeTextfield.delegate = self

Set UITextFieldDelegate and use textFieldDidBeginEditing . 设置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())
  }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM