Swift:使用 UIDatePicker 作为 UITextField inputView 不更新

Posted

技术标签:

【中文标题】Swift:使用 UIDatePicker 作为 UITextField inputView 不更新【英文标题】:Swift: using UIDatePicker as UITextField inputView not updating 【发布时间】:2014-08-24 11:36:45 【问题描述】:

我有一个文本字段,当它被选中时,会弹出一个日期选择器而不是键盘,但它只会在第一次更新今天的日期。用户更改日期,但文本字段不会继续更新。有什么问题?

这就是我调用 Datepicker 并控制输入到我的文本字段中的日期的方式:

 @IBAction func dp(sender: UITextField) 
    var DatePickerView  : UIDatePicker = UIDatePicker()
    DatePickerView.datePickerMode = UIDatePickerMode.Date
    textfieldjobdate.inputView = DatePickerView
    DatePickerView.addTarget(self, action: Selector("handleDatePicker"), forControlEvents: UIControlEvents.ValueChanged)    


func handleDatePicker() 
    var DatePickerView  : UIDatePicker = UIDatePicker()
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "dd MMM yyyy"
    textfieldjobdate.text = dateFormatter.stringFromDate(DatePickerView.date)

【问题讨论】:

【参考方案1】:

您的handleDatePicker 方法在每次调用时都会实例化一个新的DatePicker。需要在函数中加一个参数传入sender(funcdp中创建的DatePicker

@IBAction func dp(_ sender: UITextField) 
    let datePickerView = UIDatePicker()
    datePickerView.datePickerMode = .date
    sender.inputView = datePickerView
    datePickerView.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged)


@objc func handleDatePicker(sender: UIDatePicker) 
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd MMM yyyy"
    textfieldjobdate.text = dateFormatter.string(from: sender.date)

【讨论】:

感谢您的回答,但我无法申请 - 只是让程序崩溃。我还必须将 DatePicker 更改为 UIDatePicker,但它不起作用 - 抱歉。 它抛出的错误是“无法识别的选择器”我是否必须修改 func dp? 是的,您必须为handleDatePicker: 使用正确的选择器,因为它现在需要一个参数。 这就是我不知道如何实现的......我把冒号放在里面,但是在obj C中你曾经使用WithObject,但是现在呢?似乎无法弄清楚。我将如何指示正确的参数?感谢您的帮助, 没问题——我们终于到了!!我更新了我的代码以显示我们讨论的内容【参考方案2】:
    let selectedDate = datePicker.date
    print(selectedDate)
    let formatter = DateFormatter()
    formatter.dateFormat = "dd/MM/yyyy"
    let strDate = formatter.string(from: selectedDate)
    self.labelDate.text = strDate

【讨论】:

虽然您的代码 sn-p 可能会解决问题,但您应该描述您的代码的目的是什么(它如何解决问题)。此外,您可能需要检查***.com/help/how-to-answer【参考方案3】:
datePicker = UIDatePicker(frame:CGRect(x: 0, y: self.view.frame.size.height-180 , width: self.view.frame.size.width, height: 200))
    self.view.addSubview(datePicker)
    datePicker.datePickerMode = UIDatePickerMode.dateAndTime
    datePicker.isHidden = true
    button.isSelected = false
    datePicker.addTarget(self, action: #selector(self.dateSelected), for: UIControlEvents.valueChanged)

 @objc func dateSelected()

    let dateformatter1 = DateFormatter()
    dateformatter1.dateFormat = "ccc, d MMM yyy"

    let dateString1 = dateformatter1.string(from: datePicker.date)
    print("Date Selected \(dateString1)")
    labelDate.text = dateString1

    let dateformatter2 = DateFormatter()
    dateformatter2.dateFormat = "dd-MM-yyyy"
    let dateString2 = dateformatter2.string(from: datePicker.date)
    print("Date Selected \(dateString2)")


    let dateformatter3 = DateFormatter()
    dateformatter3.dateFormat = "dd/MM/yyyy"
    let dateString3 = dateformatter3.string(from: datePicker.date)
    print("Date Selected \(dateString3)")

    let dateformatter4 = DateFormatter()
    dateformatter4.dateFormat = "dd MMMM yyyy hh:mm a"
    let dateString4 = dateformatter4.string(from: datePicker.date)
    print("Date Selected \(dateString4)")


DatePicker and NSDateFormat 上的这篇文章对我帮助很大。

【讨论】:

以上是关于Swift:使用 UIDatePicker 作为 UITextField inputView 不更新的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift 3 - UIDatePicker

UIDatePicker 减去确切时间 - Swift

在 iOS8/Swift 中为 UIDatePicker 设置文本颜色和字体

文本框使用 UIDatePicker

Swift - UIDatePicker

是否可以在 Swift 中拥有来自同一个 UITextField 的 UIPickerView 和 UIDatePicker?