7

我的应用程序与通过蓝牙连接的条形码扫描仪一起使用。连接扫描仪后,您可以双击扫描仪上的按钮以关闭/显示屏幕键盘。90% 的情况下,用户希望隐藏键盘,因为他们将扫描条形码以输入数据。有一些例外情况我提前知道需要启用键盘,我想节省他们按下扫描仪按钮以调出键盘的工作,而不是强制键盘显示。

扫描仪不使用 resignfirstresponder 来关闭键盘,这很明显,因为光标仍然可见并且扫描条形码会将数据输入到当前文本字段中。

有谁知道如何在不使用 resignfirstresponder 的情况下关闭/显示屏幕键盘?

作为参考,我正在使用此扫描仪http://ww1.socketmobile.com/products/bluetooth-scanners/how-to-buy/details.aspx?sku=CX2864-1336

4

3 回答 3

2

要在视图中完全结束编辑,您可以使用以下命令

[self.view endEditing:YES];

这将在视图中为您移除键盘。

于 2013-09-23T19:34:04.650 回答
1

对于仍在为此苦苦挣扎的任何人,您可以在 Swift 中通过使文本字段的 inputView 等于UIView()

那是:

yourtextfield.inputview = UIView()
于 2019-07-12T18:08:01.577 回答
1

我今天遇到了这个问题并找到了解决方案。诀窍是使用屏幕外或隐藏的辅助文本字段并使用自定义空inputView集,并使该字段成为第一响应者。该字段在软件键盘隐藏时从硬件扫描仪捕获文本。

但是,我使用非常相似的方法来完成这项工作,而是将视图控制器本身作为扫描输入视图的第一响应者。

例子:

class SearchViewController: UIViewController, UIKeyInput {

    let searchField = UITextField()
    let softwareKeyboardHider = UIView()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(searchField)
        inputAssistantItem.leadingBarButtonGroups = []
        inputAssistantItem.trailingBarButtonGroups = []
    }

    override var canBecomeFirstResponder: Bool {
        return true
    }

    override var inputView: UIView? {
        return softwareKeyboardHider
    }

    var hasText: Bool {
        return searchField.hasText
    }

    func insertText(_ text: String) {
        searchField.insertText(text)
    }

    func deleteBackward() {
        searchField.deleteBackward()
    }
}

现在,当您想隐藏软件键盘时SearchViewController,请先做出响应。

要显示软件键盘SearchViewController.searchField,请先做出响应。

于 2019-01-25T02:44:55.437 回答