我的应用程序与通过蓝牙连接的条形码扫描仪一起使用。 连接扫描仪后,您可以双击扫描仪上的按钮以关闭/显示屏幕键盘。 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
成为第一响应者。