我正在尝试同时使用MDCTextField和表视图。 MDCTextField
过滤表视图,然后用户应点击一个单元格,并关闭键盘,并隐藏表视图。问题在于,在表视图注册已轻击单元格之前,键盘将关闭,并且表视图被隐藏。如何在MDCTextField
注册拍子之前注册一个单元已被点击?
最佳答案
我使用此扩展名,可以将其放置在helpers.swift文件中,但可以在任何UIViewController上使用
extension UIViewController {
func hideKeyboardWhenTappedAround() {
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
}
@objc func dismissKeyboard() {
view.endEditing(true)
}
}
要使用它,只需在viewDidLoad()上添加此
self.hideKeyboardWhenTappedAround()
编辑基于评论
从理论上讲,以下代码应该会有所帮助,但我还没有进行测试,我读过人们无法触发touchBegan函数,但是我也不知道有什么其他方法可以执行您想要的操作。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
let position = touch.location(in: view)
if let ip = tableView.indexPathForRow(at: position) {
let cell = tableView.cellForRow(at: ip)
print(cell.text)
}
}
}
理论如下
首先,我们获得敲击发生的位置,然后获得被录音的行(如果存在)的IndexPath,因为有了IndexPath,我们仅获得单元格。
在我给您的示例中,我打印了单元格文本,但是您可以执行任何其他所需的操作
我希望这是您想要的,并且您可以使它正常工作,因为我没有进行测试,似乎有些人在触发touchesBegan函数时遇到问题