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

24

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

这是我调用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)
}
3个回答

65

你的handleDatePicker方法每次被调用时都会实例化一个新的DatePicker。你需要向函数添加参数来传递发送者(在dp函数中创建的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,但它不起作用-抱歉。 - agf119105
它抛出的错误是“未识别选择器”,我是否需要修改函数dp? - agf119105
是的,您必须使用正确的选择器来调用 handleDatePicker:,因为它现在需要一个参数。 - Ashley Mills
这就是我不知道如何实现的...我已经加了冒号,但在Objective-C中你以前会使用WithObject,但现在呢?似乎无法弄清楚。我该如何指示正确的参数?感谢您的帮助。 - agf119105
1
没问题 - 我们最终解决了!!我更新了我的代码以展示我们讨论的内容。 - Ashley Mills
显示剩余2条评论

0
    let selectedDate = datePicker.date
    print(selectedDate)
    let formatter = DateFormatter()
    formatter.dateFormat = "dd/MM/yyyy"
    let strDate = formatter.string(from: selectedDate)
    self.labelDate.text = strDate

1
虽然您的代码片段可能解决了问题,但您应该描述代码的目的(它如何解决问题)。此外,您可能需要查看https://stackoverflow.com/help/how-to-answer。 - Ahmad F

-1
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和NSDateFormat的文章对我帮助很大。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接