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

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

复制并粘贴此代码,它将起作用。如果有任何问题,请告诉我。编码愉快:)