ios - resignFirstResponder() 不适用于日期选择器
问题描述
我有一个用Swift 5CustomIDatePicker
编写的非常简单的类,它顶部有一个工具栏,其中包含一个“完成”按钮。问题是,按下此按钮时键盘从未缩回。我尝试了4种不同的方法,请参阅下面的详细信息:
import UIKit
class CustomDatePicker: UIDatePicker {
var zTextField: UITextField!
let toolbar = UIToolbar()
convenience init(textField: UITextField) {
self.init()
// bar buttons
let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(donePressed(sender:)))
toolbar.sizeToFit()
toolbar.setItems([doneBtn], animated: true)
self.datePickerMode = .date
// link up the Text Field
zTextField = textField
zTextField.inputAccessoryView = toolbar
zTextField.inputView = self
}
@objc func donePressed (sender: UIBarButtonItem) {
print("done pressed") // this line appeared in the debugger
//self.resignFirstResponder()
//self.inputView?.resignFirstResponder()
//self.endEditing(true)
self.inputView?.endEditing(true) // tried all of these 4, but keyboard always remained in view
}
}
一个非常简单的 ViewController 来测试这个类:
class ViewController: UIViewController {
@IBOutlet weak var theTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
let datePicker = CustomDatePicker(textField: theTextField)
}
}
任何帮助将不胜感激!
解决方案
实现 UITextField 委托功能
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return false
}
@objc func donePressed (sender: UIBarButtonItem) {
print("done pressed")
self.zTextField.resignFirstResponder() // new line
}
推荐阅读
- regex - 正则表达式:从匹配的模式中排除字符串
- java - Spring Boot Data JPA 从存储过程接收多个输出参数
- ios - 无法调用非函数类型“对象”的值
- nginx - 无法禁用 X-frame 选项:nginx 中的同源
- angular - 我有一个输入,它使用其他输入字段的值自动填充其数据,但我不想自动填充它
- excel - 为 Jira 和 Excel 文件错误消息编写的 Visual Basic 应用程序
- java - 我应该使用 try/catch 来检查丢失的输入吗?
- docusignapi - Java JWT Docusign API - 重定向
- docker - Docker 桌面在 Windows 10 上崩溃
- tensorflow - 如何创建具有多个张量输入的可编译 tf.keras 模型?