ios - 选择 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)
}
解决方案
我认为你不需要写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()
}
推荐阅读
- dart - 未来建造者
- >:snapshot.hasdata 总是假的
- javascript - 为什么我们可以先修复构造函数属性然后重置原型?
- php - 添加 AddHandler 后 PHP 版本不变
- php - SQL Server 计算列 - 字母字符的主键
- python - 如何将列表拆分为 subsist 然后在 python 中对其进行平均?
- animation - Material-UI:如何从给定位置“增长”对话框?
- angular - 不相关组件之间的角度通信
- python - 在python中获取'+'字符之前的字符串内容
- mysql - 计算在其他表中至少有一个引用的主表行
- javascript - JavaScript 短路评估 - 缺少属性值