IOS 关闭/显示键盘而不辞职第一响应者



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

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

有谁知道如何在不使用辞职第一响应者的情况下关闭/显示屏幕键盘?

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

对于仍在为此苦苦挣扎的人,您可以在 Swift 中通过使文本字段的输入视图等于 UIView() 来实现这一点

那是:

yourtextfield.inputview = UIView()

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

[self.view endEditing:YES];

这将在视图中删除键盘。

我今天遇到了这个问题,并找到了解决方案。诀窍是使用屏幕外或隐藏的辅助文本字段,并设置自定义空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成为第一响应者。

最新更新