【问题标题】:IOS Dismiss/Show keyboard without Resigning First ResponderIOS在不退出第一响应者的情况下关闭/显示键盘
【发布时间】:2013-09-23 15:40:11
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ios keyboard


    【解决方案1】:

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

    [self.view endEditing:YES];
    

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

    【讨论】:

    • 它确实移除了键盘,但并没有解决问题的核心。这个想法是在不改变通过扫描仪输入文本的能力的情况下移除或显示键盘。如果使用 endEditing 命令,它将从活动文本字段中删除光标。
    • 它适用于普通的文本字段键盘。但当前系统短信控制器无法移动键盘
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      即:

      yourtextfield.inputview = UIView()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-20
        • 1970-01-01
        • 2015-07-15
        • 1970-01-01
        • 1970-01-01
        • 2017-07-09
        • 1970-01-01
        相关资源
        最近更新 更多