问题描述
目前,我正在向日期选择器添加方法,以在值更改时对变量进行更改。每个选择器都有其自己的方法。
是否有一种简单的方法可以合并这些方法,所以我只有一个方法可以检查更改了哪个选择器,或者最好让每个选择器都有自己的方法。
我现在
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
}
解决方法
定义您的选择器的价值变化事件,如下所示:
<img class="cat-icon" v-bind:src="require('img/icon/' + icon)" style="width:25px;" />
然后定义通用函数,如下所示:
datePickerEnd.addTarget(self,action: #selector(pickerDidChange),for: UIControl.Event.valueChanged)
datePickerStart.addTarget(self,for: UIControl.Event.valueChanged)
datePickerOrdered.addTarget(self,for: UIControl.Event.valueChanged)
datePickerReceived.addTarget(self,for: UIControl.Event.valueChanged)
,
为您使用的每个日期选择器传递标签。尝试下面的代码-
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")
}
}
复制并粘贴此代码,它将起作用。让我知道是否有任何问题。编码愉快:)