多个日期选择器-使用更改的值

问题描述

目前,我正在向日期选择器添加方法,以在值更改时对变量进行更改。每个选择器都有其自己的方法

是否有一种简单的方法可以合并这些方法,所以我只有一个方法可以检查更改了哪个选择器,或者最好让每个选择器都有自己的方法

我现在

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")
     }
 }

复制并粘贴此代码,它将起作用。让我知道是否有任何问题。编码愉快:)