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 不更新的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS8/Swift 中为 UIDatePicker 设置文本颜色和字体
是否可以在 Swift 中拥有来自同一个 UITextField 的 UIPickerView 和 UIDatePicker?