【问题标题】:Keyboard will not dismiss once DatePicker is selected选择 DatePicker 后,键盘不会关闭
【发布时间】:2020-04-27 17:04:36
【问题描述】:

我正在使用 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)

    }

【问题讨论】:

    标签: ios swift iqkeyboardmanager


    【解决方案1】:

    我真的不知道你为什么需要为每个 TextField 调用 becomeFirstResponder()resignFirstResponder(),因为当在任何 TextField 上收到触摸时它们会自动调用。

    如果你还没有设置每个TextField的委托,你可以试试:

         override func viewDidLoad(){
      super.viewDidLoad()
    
       firstName.delegate = self
       lastName.delegate = self
       routing_number.delegate = self
       account_holder_name.delegate = self
    
    
    
         }
    

    【讨论】:

      【解决方案2】:

      我认为你不需要写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()
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-05
        • 2015-12-19
        • 2011-09-19
        • 1970-01-01
        • 2020-02-26
        相关资源
        最近更新 更多