IOS在不辞退第一响应者的情况下关闭/显示键盘

IOS在不辞退第一响应者的情况下关闭/显示键盘,ios,keyboard,Ios,Keyboard,我的应用程序与通过蓝牙连接的条形码扫描仪一起使用。连接扫描仪后,您可以双击扫描仪上的按钮以关闭/显示屏幕键盘。90%的情况下,用户希望在扫描条形码以输入数据时隐藏键盘。我提前知道有一些例外情况需要启用键盘,我想让他们省去按下扫描仪按钮打开键盘的工作,而是强制键盘显示 扫描仪不会使用resignfirstresponder关闭键盘,这一点很明显,因为光标仍然可见,扫描条形码将向当前文本字段输入数据 有人知道如何在不使用resignfirstresponder的情况下关闭/显示屏幕键盘吗 作为参考,

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

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

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


作为参考,我使用此扫描仪在视图中完全结束编辑,您可以使用以下命令

[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设置为第一响应者。

对于仍在努力解决此问题的任何人,您可以在Swift中通过使文本字段的输入视图等于
UIView()

即:

yourtextfield.inputview = UIView()

它确实删除了键盘,但没有解决问题的核心。其想法是移除或显示键盘,而不改变通过扫描仪输入文本的能力。如果使用endEditing命令,它将从活动文本字段中删除光标。它适用于普通文本字段键盘。但现有系统短信控制器无法移动键盘