Swift
Swift

Reputation: 1184

How to add one DatePicker to three textfields in swift

I need to add DatePicker to three textfields for that

I have created one datepicker like below

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, y: 0, width: screenWidth, 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", style: .plain, target: target, action: selector)
toolBar.setItems([cancelBarButton, flexibleSpace, doneBarButton], animated: false)

self.inputAccessoryView = toolBar
}

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

and i am adding datepicker to three textfields in doneButtonPressed like below

    @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()
 }

and in 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))

 }

with above code if i add date in fromDateTextfield then in all three textfields same date is adding.. without going to that remaining two textfields

i want to add different dates to three textfields.. how to do that with above code..

if my above code is wrong please help me with new correct working code for three three textfields

Upvotes: 0

Views: 117

Answers (1)

Shehata Gamal
Shehata Gamal

Reputation: 100503

Set a tag to every UIBarButtonItem from 0 to 2

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

Upvotes: 1

Related Questions