-2

I am using IQKeyBoardManager for my project build in Swift. I am having a problem in one specific View Controller. Once I keep going down my text fields and reach the date of birth text field, that is when I want the keyboard to be dismissed. I tried to add a function on once date picker value was changed to dismiss keyboard, however it did not work. I want the keyboard to be dismissed as soon as my datePicker is active. datePicker

     @objc func keyboardDoneClicked() {

    switch openedTextFieldTag {
    case 1:
            firstName.resignFirstResponder()
            lastName.becomeFirstResponder()
            routing_number.resignFirstResponder()
            account_number.resignFirstResponder()
            account_holder_name.resignFirstResponder()
    case 2:
            firstName.resignFirstResponder()
            lastName.resignFirstResponder()
            routing_number.becomeFirstResponder()
            account_number.resignFirstResponder()
            account_holder_name.resignFirstResponder()
    case 3:
            firstName.resignFirstResponder()
            lastName.resignFirstResponder()
            routing_number.becomeFirstResponder()
            account_number.resignFirstResponder()
            account_holder_name.resignFirstResponder()
    case 4:
            firstName.resignFirstResponder()
            lastName.resignFirstResponder()
            routing_number.resignFirstResponder()
            account_number.becomeFirstResponder()
            account_holder_name.resignFirstResponder()
    case 5:
            firstName.resignFirstResponder()
            lastName.resignFirstResponder()
            routing_number.resignFirstResponder()
            account_number.resignFirstResponder()
            account_holder_name.resignFirstResponder()
    default:
        break
    }
}


   func textFieldDidBeginEditing(_ textField: UITextField) {
    openedTextFieldTag = 0
    if textField == self.date_of_birth {
        view.endEditing(true)
        self.datePicker.isHidden = false
        self.doneBtn.isHidden = false
        self.view.endEditing(true)
        date_of_birth.resignFirstResponder()
        firstName.resignFirstResponder()
        lastName.resignFirstResponder()
        routing_number.resignFirstResponder()
        account_number.resignFirstResponder()
        account_holder_name.resignFirstResponder()
    } else {
        self.datePicker.isHidden = true
        self.doneBtn.isHidden = true
    }
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    if textField == firstName {
        firstName.resignFirstResponder()
        lastName.becomeFirstResponder()
        routing_number.resignFirstResponder()
        account_number.resignFirstResponder()
        account_holder_name.resignFirstResponder()
    } else if textField == lastName {
        firstName.resignFirstResponder()
        lastName.resignFirstResponder()
        routing_number.becomeFirstResponder()
        account_number.resignFirstResponder()
        account_holder_name.resignFirstResponder()
    } else if textField == routing_number {

        firstName.resignFirstResponder()
        lastName.resignFirstResponder()
        routing_number.becomeFirstResponder()
        account_number.resignFirstResponder()
        account_holder_name.resignFirstResponder()
    } else if textField == account_number {
        firstName.resignFirstResponder()
        lastName.resignFirstResponder()
        routing_number.resignFirstResponder()
        account_number.becomeFirstResponder()
        account_holder_name.resignFirstResponder()
    } else if textField == account_holder_name {
        firstName.resignFirstResponder()
        lastName.resignFirstResponder()
        routing_number.resignFirstResponder()
        account_number.resignFirstResponder()
        account_holder_name.resignFirstResponder()
        date_of_birth.resignFirstResponder()

        self.datePicker.isHidden = false
        self.doneBtn.isHidden = false
    }

    return true
}

  @objc func pickerEditingDidEnd(_ date: UIDatePicker ) {
    print(date)
    datePicker.isHidden = true
    self.doneBtn.isHidden = true

    let formatter = DateFormatter()

    formatter.dateFormat = "dd/MM/yyyy"

    self.date_of_birth.text = formatter.string(from: self.datePicker.date)
    UserDefaults.standard.set(datePicker.date, forKey: "dob")

}


    override func viewDidLoad(){
     datePicker.date = Date()
    datePicker.datePickerMode = .date
    datePicker.addTarget(self, action: #selector(pickerEditingDidEnd), for: .editingDidEnd)
    datePicker.backgroundColor = UIColor.white
    datePicker.layer.borderColor = THEME_BLUE_COLOR.cgColor
    datePicker.layer.borderWidth = 1.0
    datePicker.isHidden = true
    self.view.addSubview(datePicker)

    }
soRazor
  • 137
  • 9

2 Answers2

0

I really don’t know why you need to call becomeFirstResponder() and resignFirstResponder() for each TextField since they are automatically called when a touch is received on any TextField.

If you didn’t set each TextField’s delegate yet, you can try:

     override func viewDidLoad(){
  super.viewDidLoad()

   firstName.delegate = self
   lastName.delegate = self
   routing_number.delegate = self
   account_holder_name.delegate = self



     }
Celeste
  • 1,519
  • 6
  • 19
0

I think you don't need to write becomeFirstResponder() and resignFirstResponder() because IQKeyBoardManager will manage it. So remove all that for each text field and check that for date picker.

You can also try,

@objc func pickerEditingDidEnd(_ date: UIDatePicker ) {
    print(date)
    datePicker.isHidden = true
    self.doneBtn.isHidden = true

    let formatter = DateFormatter()

    formatter.dateFormat = "dd/MM/yyyy"

    self.date_of_birth.text = formatter.string(from: self.datePicker.date)
    UserDefaults.standard.set(datePicker.date, forKey: "dob")
    self.date_of_birth.resignFirstResponder()

}
Kishan Bhatiya
  • 2,175
  • 8
  • 14