如何在MDCTextField外部点击时删除解除键盘操作

时间:2018-08-10 16:55:28

标签: ios swift xcode material-design mdc-components

我正在尝试同时使用MDCTextField和表格视图。 MDCTextField过滤表格视图,然后用户应点击一个单元格,并关闭键盘并隐藏表格视图。问题在于,键盘关闭并且表视图在表视图注册轻击单元格之前被隐藏。在MDCTextField注册抽头之前,我该如何注册一个单元格被点击?

1 个答案:

答案 0 :(得分:0)

我使用此扩展名,可以将其放置在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)
        }
    }
}

理论如下

首先我们获得敲击发生的位置,然后我们获得被录音的行(如果存在)的索引路径,因为有了索引路径我们就可以得到单元格。

在我给您的示例中,我打印了单元格文本,但是您可以执行所需的任何其他操作

我希望这是您想要的,并且因为我没有进行测试,并且似乎有人在触发touchesBegan函数时遇到问题,所以您可以使其正常工作