【问题标题】:How to add datepickerview on IQKeyboardManagerSwift in swift如何快速在 IQKeyboardManagerSwift 上添加 datepickerview
【发布时间】:2019-12-06 05:13:26
【问题描述】:

我是 Swift 新手,在 IQKeyboardManagerSwift 上显示 datepickerview 时遇到问题

我正在尝试这样的代码,但它不起作用

func textFieldDidBeginEditing(_ textField: UITextField) {
    self.dischargeDateTextField = textField

    // Create a date picker for the date field.
    let picker = UIDatePicker()
    picker.datePickerMode = .date
    picker.addTarget(self, action: #selector(updateDateField(sender:)), for: .valueChanged)

    // If the date field has focus, display a date picker instead of keyboard.
    // Set the text to the date currently displayed by the picker.
    textField.inputView = picker
    textField.text = formatDateForDisplay(date: picker.date)
}

// Called when the date picker changes.

@objc func updateDateField(sender: UIDatePicker) {
    dischargeDateTextField?.text = formatDateForDisplay(date: sender.date)
}


// Formats the date chosen with the date picker.

fileprivate func formatDateForDisplay(date: Date) -> String {
    let formatter = DateFormatter()
    formatter.dateFormat = "dd MMM yyyy"
    return formatter.string(from: date)
}

我需要“yyyy-mm-dd”中的日期格式,但它只显示在图像中

我这样改代码

 fileprivate func formatDateForDisplaySurgery(date: Date) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyy-mm-dd"
        return formatter.string(from: date)
    }

但它也不起作用

【问题讨论】:

  • 这是特定于语言环境的。请参考此链接,stackoverflow.com/a/13952239/3825016
  • 您在 formatDateForDisplaySurgery 方法中更新的代码只会反映在您的 textField 显示中。它不会改变日期选择器的显示。

标签: ios swift datepicker


【解决方案1】:

viewDidLoad()方法中添加你的inputView代码。

override func viewDidLoad() {
    super.viewDidLoad()
    let picker = UIDatePicker()
    picker.datePickerMode = .date
    picker.addTarget(self, action: #selector(updateDateField(sender:)), for: .valueChanged)

    // If the date field has focus, display a date picker instead of keyboard.
    // Set the text to the date currently displayed by the picker.
    self.dischargeDateTextField.inputView = picker
}

并从textFieldDidBeginEditing 方法中删除相同的代码行。

其他方法你已经写对了。

@objc func updateDateField(sender: UIDatePicker) {
    dischargeDateTextField?.text = formatDateForDisplay(date: sender.date)
}

// Formats the date chosen with the date picker.
fileprivate func formatDateForDisplay(date: Date) -> String {
    let formatter = DateFormatter()
    formatter.dateFormat = "dd MMM yyyy"
    return formatter.string(from: date)
}

【讨论】:

【解决方案2】:

在 'viewDidLoad' 方法中编写此代码。

let picker = UIDatePicker()
picker.datePickerMode = .date
picker.addTarget(self, action: #selector(updateDateField(sender:)), for: 
.valueChanged)
self.dischargeDateTextField .inputView = picker

【讨论】:

    【解决方案3】:

    首先初始化你的 datePicker,

    var datePicker = UIDatePicker()
    

    将此代码添加到您的viewDidLoad 而不是textFieldDidBeginEditing

    override func viewDidLoad() {
        super.viewDidLoad()
        var datePicker = UIDatePicker()
        datePicker.datePickerMode = .date
        datePicker.addTarget(self, action: #selector(dateChanged(sender:)), for: .valueChanged)
    
        dateTxtF.inputView = datePicker /// Set InputView to textfield
    
    }
    

    dateChanged 方法

        @objc func dateChanged(sender:UIDatePicker) {
            print(sender.date.year)
            print(sender.date.month)
            print(sender.date.day)
        }
    

    【讨论】:

      【解决方案4】:

      您可以为 UITextField 创建一个扩展,这将帮助您获取任何 UITextField 的 DatePicker

      func addDatePicker(target: Any, selector: Selector) {
          //Add DatePicker as inputView
          let datePicker = UIDatePicker()
          datePicker.datePickerMode = .date
          datePicker.addTarget(target, action: selector, for: .valueChanged)
          self.inputView = datePicker
      }
      

      处理日期选择器的动作方法

      @objc func updatedDate(sender: UIDatePicker) {
          print(sender.date)
      }
      

      一旦你创建了以上的扩展,你就可以像这样在你的文本字段中使用它

      YOUR_TXTFLD.addDatePicker(target: self, selector: #selector(updatedDate(sender:)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多