【问题标题】:How to remove the dismiss keyboard action on tapping outside MDCTextField如何在 MDCTextField 外部点击时删除关闭键盘操作
【发布时间】:2018-08-10 16:55:27
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我使用这个扩展,你可以将它放在一个 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 函数时遇到问题

    【讨论】:

    • 我认为您没有理解这个问题。在选择表格视图单元格之前,键盘会关闭。我正在尝试首先让表格视图点击注册。你知道怎么做吗?
    • @jimmyruby 我误解了你的问题,我认为更新符合你的需要。但是,我将保留上一部分,因为它可以帮助其他用户
    猜你喜欢
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    相关资源
    最近更新 更多