首页 > 解决方案 > 选择 DatePicker 后,键盘不会关闭

问题描述

我正在使用 IQKeyBoardManager 在 Swift 中构建我的项目。我在一个特定的视图控制器中遇到问题。一旦我继续向下输入文本字段并到达出生日期文本字段,那就是我希望关闭键盘的时候。一旦日期选择器值更改为关闭键盘,我尝试添加一个函数,但是它不起作用。我希望在我的 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)

    }

标签: iosswiftiqkeyboardmanager

解决方案


我认为你不需要写becomeFirstResponder()resignFirstResponder()因为IQKeyBoardManager会管理它。因此,删除每个文本字段的所有内容并检查日期选择器。

你也可以试试,

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

}

推荐阅读