ios - 键盘有时会显示在 iOS 的文本字段选择器视图中
问题描述
我有一个文本字段,点击时会显示UIPickerView
. 我将其添加为inputView
文本字段。有时当我点击文本字段时,它会显示键盘而不是选择器视图。我添加了一个子类的自定义类UITextField
。
override func viewDidLoad() {
// ...
monthTextField.addTarget(self, action: #selector(monthTextFieldDidTap), for: UIControl.Event.touchDown)
}
@objc func monthTextFieldDidTap(textField: UITextField) {
activePickerType = PickerType.month
viewDatePicker(textField)
}
@objc func yearTextFieldDidTap(textField: UITextField) {
activePickerType = PickerType.year
viewDatePicker(textField)
}
func viewDatePicker(_ textField: UITextField) {
self.datePicker = UIPickerView.init(frame: CGRect.init(x: 0, y: 0, width: self.navigationController!.view.frame.size.width, height: 216))
self.datePicker.delegate = self
self.datePicker.dataSource = self
textField.inputView = self.datePicker
// ...
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if (textField == monthTextField) {
return true
}
return false
}
的自定义子类UITextField
:
class PickerTextField: UITextField {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func caretRect(for position: UITextPosition) -> CGRect {
return CGRect.zero
}
func selectionRects(for range: UITextRange) -> [Any] {
return []
}
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
UIMenuController.shared.isMenuVisible = false
self.resignFirstResponder()
return false
}
}
如何确保在点击时不显示键盘UITextField
并始终显示UIPickerView
?
解决方案
将这些行放在 viewDidLoad 而不是 monthTextFieldDidTap
self.datePicker = UIPickerView.init(frame: CGRect.init(x: 0, y: 0, width: self.navigationController!.view.frame.size.width, height: 216))
self.datePicker.delegate = self
self.datePicker.dataSource = self
monthTextField.inputView = self.datePicker
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if (textField == monthTextField) {
activePickerType = PickerType.month
viewDatePicker(textField)
}
return true
}
推荐阅读
- oracle-apex - 如何在 iFrame 上使用 Apex 应用程序?
- r - 用不同数量的逗号分隔多列中的行
- html - 如何使用 CSS 使工具提示移动友好
- python - 数组的特殊改组
- angular - 如何解决找不到模块'@angular/router/src/utils/collection'或其对应的类型声明
- python - Python 数据处理 - 使用二进制掩码有效地将 3D 数组拆分为两个
- linux - 使用 stdin fd 将输入发送到正在运行的 shell 脚本
- javascript - 即使使用 JSON.parse,Snowflake 也无法将对象绑定到查询中以将其插入到变体列中
- reactjs - 如何在下面的数据中添加搜索功能(理想情况下在另一个组件中)
- python - 如何通过 Python 中的原始字符串索引将 HTML 标记插入字符串?