如何快速将一个 DatePicker 添加到三个文本字段

问题描述

为此我需要将 DatePicker 添加到三个文本字段

我创建了一个如下所示的日期选择器

func addInputViewDatePicker(target: Any,selector: Selector) {

let screenWidth = UIScreen.main.bounds.width

//Add DatePicker as inputView
let datePicker = UIDatePicker(frame: CGRect(x: 0,y: 0,width: screenWidth,height: 216))
datePicker.datePickerMode = .date
self.inputView = datePicker

//Add Tool Bar as input AccessoryView
let toolBar = UIToolbar(frame: CGRect(x: 0,height: 44))
let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace,target: nil,action: nil)
let cancelBarButton = UIBarButtonItem(title: "Cancel",style: .plain,target: self,action: #selector(cancelpressed))
let doneBarButton = UIBarButtonItem(title: "Done",target: target,action: selector)
toolBar.setItems([cancelBarButton,flexibleSpace,doneBarButton],animated: false)

self.inputAccessoryView = toolBar
}

@objc func cancelpressed() {
 self.resignFirstResponder()
}

我正在向 doneButtonpressed 中的三个文本字段添加日期选择器,如下所示

    @objc func doneButtonpressed() {
    
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"   
 
    if let  datePicker = self.fromDateTextfield.inputView as? UIDatePicker {
    
        self.fromDateTextfield.text = dateFormatter.string(from: datePicker.date)

    }
    if let  datePicker = self.toDateTextfield.inputView as? UIDatePicker {
      
        self.toDateTextfield.text = dateFormatter.string(from: datePicker.date)
    }
    if let  datePicker = self.lastbidDateTextfield.inputView as? UIDatePicker {
       
        self.lastbidDateTextfield.text = dateFormatter.string(from: datePicker.date)
    }
    
    self.lastbidDateTextfield.resignFirstResponder()
    self.toDateTextfield.resignFirstResponder()
    self.fromDateTextfield.resignFirstResponder()
 }

在viewdidload中:

override func viewDidLoad() {
    super.viewDidLoad()        
    fromDateTextfield.addInputViewDatePicker(target: self,selector: #selector(doneButtonpressed))
    toDateTextfield.addInputViewDatePicker(target: self,selector: #selector(doneButtonpressed))
    lastbidDateTextfield.addInputViewDatePicker(target: self,selector: #selector(doneButtonpressed))

 }

使用上面的代码,如果我在 fromDateTextfield添加日期,那么在所有三个文本字段中都会添加相同的日期......而不去剩下的两个文本字段

我想为三个文本字段添加不同的日期..如何使用上面的代码做到这一点..

如果我上面的代码错误的,请帮助我为三个三个文本字段提供新的正确工作代码

解决方法

为从 0 到 2 的每个 UIBarButtonItem 设置一个标签

func addInputViewDatePicker(target: Any,selector: Selector,tag:Int)
  .....
  doneBarButton.tag = tag
} 
@objc func doneButtonPressed(_ sender: UIBarButtonItem) {
  let dateFormatter = DateFormatter()
  dateFormatter.dateFormat = "yyyy-MM-dd"   
  let arr = [fromDateTextfield,toDateTextfield,lastbidDateTextfield]
  let current = arr[sender.tag]
  if let datePicker = current.inputView as? UIDatePicker {
    current.text = dateFormatter.string(from: datePicker.date)
    current.resignFirstResponder()
  }
}