多个日期选择器 - 使用更改的值
Multiple Date Pickers - Using Value Changed
目前我正在向日期选择器添加方法,以便在值更改时对变量进行更改。每个选择器都有自己的方法。
有没有一种简单的方法来组合这些方法,这样我就有一个方法可以检查哪个选择器被更改了,或者我最好让每个选择器都有自己的方法。
目前我有
datePickerEnd.addTarget(self, action: #selector(endPickerChange), for: UIControl.Event.valueChanged)
datePickerStart.addTarget(self, action: #selector(startPickerChange), for: UIControl.Event.valueChanged)
datePickerOrdered.addTarget(self, action: #selector(orderedPickerChange), for: UIControl.Event.valueChanged)
datePickerReceived.addTarget(self, action: #selector(receivedPickerChange), for: UIControl.Event.valueChanged)
@objc func endPickerChange () {
finishedVisible = true
}
@objc func startPickerChange () {
startedVisible = true
}
@objc func orderedPickerChange () {
orderedVisible = true
}
@objc func receivedPickerChange () {
receivedVisible = true
}
像这样定义选择器的值更改事件:
datePickerEnd.addTarget(self, action: #selector(pickerDidChange), for: UIControl.Event.valueChanged)
datePickerStart.addTarget(self, action: #selector(pickerDidChange), for: UIControl.Event.valueChanged)
datePickerOrdered.addTarget(self, action: #selector(pickerDidChange), for: UIControl.Event.valueChanged)
datePickerReceived.addTarget(self, action: #selector(pickerDidChange), for: UIControl.Event.valueChanged)
然后像这样定义常用函数:
@objc func pickerDidChange(_ picker: UIDatePicker) {
switch picker {
case datePickerEnd: print("datePickerEnd changed")
case datePickerStart: print("datePickerStart changed")
case datePickerOrdered: print("datePickerOrdered changed")
case datePickerReceived: print("datePickerReceived changed")
default: break
}
}
为您使用的每个日期选择器传递 标签。试试下面的代码 -
func showDatePicker(forPickerName: String) {
// Setup the UIDatePicker
datePicker = UIDatePicker.init()
datePicker.backgroundColor = UIColor.white
datePicker.autoresizingMask = .flexibleWidth
datePicker.datePickerMode = .date
switch forPickerName{
case "StartDate":
datePicker.tag = 0
case "EndDate":
datePicker.tag = 1
default:
datePicker.tag = 2
}
datePicker.addTarget(self, action: #selector(self.dateChanged(_:)), for: .valueChanged)
datePicker.frame = CGRect(x: 0.0, y: UIScreen.main.bounds.size.height - 300, width: UIScreen.main.bounds.size.width, height: 300)
self.view.addSubview(datePicker)
}
在你的 dateChanged 中,你将通过使用标签获得更改的选择器值。
@objc func dateChanged(_ sender: UIDatePicker?) {
print(sender?.tag)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
if let date = sender?.date {
self.view_DOB.tf_TextInput.text = dateFormatter.string(from: date)
}
switch sender?.tag {
case 0:
print("start date", dateFormatter.string(from: date))
case 1:
print("end date", dateFormatter.string(from: date))
default:
print("Other", dateFormatter.string(from: date))
}
}
在您想要日期选择器和相关字符串的地方调用第一个函数 -
@IBAction func btnAction_PickedClicked(_ sender: UIButton) {
switch sender.tag {
case 0:
showDatePicker(forPickerName: "StartDate")
case 1:
showDatePicker(forPickerName: "EndDate")
default:
showDatePicker(forPickerName: "Other")
}
}
复制并粘贴此代码,它将起作用。如果有任何问题,请告诉我。编码愉快:)
目前我正在向日期选择器添加方法,以便在值更改时对变量进行更改。每个选择器都有自己的方法。
有没有一种简单的方法来组合这些方法,这样我就有一个方法可以检查哪个选择器被更改了,或者我最好让每个选择器都有自己的方法。
目前我有
datePickerEnd.addTarget(self, action: #selector(endPickerChange), for: UIControl.Event.valueChanged)
datePickerStart.addTarget(self, action: #selector(startPickerChange), for: UIControl.Event.valueChanged)
datePickerOrdered.addTarget(self, action: #selector(orderedPickerChange), for: UIControl.Event.valueChanged)
datePickerReceived.addTarget(self, action: #selector(receivedPickerChange), for: UIControl.Event.valueChanged)
@objc func endPickerChange () {
finishedVisible = true
}
@objc func startPickerChange () {
startedVisible = true
}
@objc func orderedPickerChange () {
orderedVisible = true
}
@objc func receivedPickerChange () {
receivedVisible = true
}
像这样定义选择器的值更改事件:
datePickerEnd.addTarget(self, action: #selector(pickerDidChange), for: UIControl.Event.valueChanged)
datePickerStart.addTarget(self, action: #selector(pickerDidChange), for: UIControl.Event.valueChanged)
datePickerOrdered.addTarget(self, action: #selector(pickerDidChange), for: UIControl.Event.valueChanged)
datePickerReceived.addTarget(self, action: #selector(pickerDidChange), for: UIControl.Event.valueChanged)
然后像这样定义常用函数:
@objc func pickerDidChange(_ picker: UIDatePicker) {
switch picker {
case datePickerEnd: print("datePickerEnd changed")
case datePickerStart: print("datePickerStart changed")
case datePickerOrdered: print("datePickerOrdered changed")
case datePickerReceived: print("datePickerReceived changed")
default: break
}
}
为您使用的每个日期选择器传递 标签。试试下面的代码 -
func showDatePicker(forPickerName: String) {
// Setup the UIDatePicker
datePicker = UIDatePicker.init()
datePicker.backgroundColor = UIColor.white
datePicker.autoresizingMask = .flexibleWidth
datePicker.datePickerMode = .date
switch forPickerName{
case "StartDate":
datePicker.tag = 0
case "EndDate":
datePicker.tag = 1
default:
datePicker.tag = 2
}
datePicker.addTarget(self, action: #selector(self.dateChanged(_:)), for: .valueChanged)
datePicker.frame = CGRect(x: 0.0, y: UIScreen.main.bounds.size.height - 300, width: UIScreen.main.bounds.size.width, height: 300)
self.view.addSubview(datePicker)
}
在你的 dateChanged 中,你将通过使用标签获得更改的选择器值。
@objc func dateChanged(_ sender: UIDatePicker?) {
print(sender?.tag)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
if let date = sender?.date {
self.view_DOB.tf_TextInput.text = dateFormatter.string(from: date)
}
switch sender?.tag {
case 0:
print("start date", dateFormatter.string(from: date))
case 1:
print("end date", dateFormatter.string(from: date))
default:
print("Other", dateFormatter.string(from: date))
}
}
在您想要日期选择器和相关字符串的地方调用第一个函数 -
@IBAction func btnAction_PickedClicked(_ sender: UIButton) {
switch sender.tag {
case 0:
showDatePicker(forPickerName: "StartDate")
case 1:
showDatePicker(forPickerName: "EndDate")
default:
showDatePicker(forPickerName: "Other")
}
}
复制并粘贴此代码,它将起作用。如果有任何问题,请告诉我。编码愉快:)