resignFirstResponder() 不适用于日期选择器
Posted
技术标签:
【中文标题】resignFirstResponder() 不适用于日期选择器【英文标题】:resignFirstResponder() didn't work for Date Picker 【发布时间】:2020-05-07 09:47:32 【问题描述】:我有一个用 Swift 5 编写的非常简单的CustomIDatePicker
类,它的顶部有一个工具栏,其中包含一个“完成”按钮。问题是,按下此按钮时键盘从未缩回。我已经尝试了 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)
任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:实现 UITextField 委托函数
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool
return false
@objc func donePressed (sender: UIBarButtonItem)
print("done pressed")
self.zTextField.resignFirstResponder() // new line
【讨论】:
以上是关于resignFirstResponder() 不适用于日期选择器的主要内容,如果未能解决你的问题,请参考以下文章
resignFirstResponder 没有在 iPad 中隐藏 UIkeyboard
MonoTouch:ResignFirstResponder() 问题
点击UITableView时resignFirstResponder?