是否可以在没有键盘的情况下选择 UITextField?

Is it possible to have a UITextField selected without a keyboard present?

我的情况总结

我的应用程序使用充当外部键盘的条形码扫描仪。在特定视图上,我想在没有任何键盘的情况下选择一个隐藏的文本字段。然后我可以让条形码扫描器将数据发送到这个文本字段。

我正在使用 IPad Air 2。

到目前为止我做了什么

我已将文本字段 inputView 和 inputAccessoryView 设置为空 UIView。

_barcodeText.inputView = [[UIView alloc] initWithFrame:CGRectZero];
_barcodeText.inputAccessoryView = [[UIView alloc] initWithFrame:CGRectZero];

这主要是有效的,但是它留下了键盘的顶部:

我曾尝试通过删除文本字段委托方法中的 UIRemoteKeyboardWindow 来解决此问题,但此解决方案似乎非常不一致,并且可能会在我的应用程序的其他部分引起更多问题。我用来执行此操作的代码如下:

// LOOP THROUGH WINDOWS
for(NSObject *window in [[UIApplication sharedApplication] windows]){
        
    // GET CLASS NAME
    NSString *name = NSStringFromClass([window class]);
        
    // CHECK FOR KEYBOARD WINDOW
    if([name isEqualToString:@"UIRemoteKeyboardWindow"]){
            
        // REMOVE KEYBOARD
        [(UIWindow*)window removeFromSuperview];
        [(UIWindow*)window setHidden:true];
            
    }
        
}

如果您的隐藏 UITextField 实际上永远不需要用户输入,只需将其设为隐藏 UILabel,或者将数据存储在 String 变量中而不是任何 UI 根本没有对象。

UIViewController viewDidLoad()中设置键盘观察器:

NotificationCenter.default.addObserver(self,
                                           selector: #selector(keyboardShow),
                                           name: .UIKeyboardWillShow, object: nil)

    func keyboardShow(){
    for w in UIApplication.shared.windows {
        let x = NSStringFromClass(w.classForCoder)
            if x == "UIRemoteKeyboardWindow" {
                w.frame.origin.x = -500
                // OR 
               w.frame = CGRect.zero
            }
    }
}

上面的代码会将键盘隐藏在主 window 边界之外...

希望对您有所帮助

不幸的是,您无法完全摆脱键盘。我所做的是使用 Sockets 条码扫描仪,链接在这里:https://www.socketmobile.com/home/?languageRedirect=true

他们有一个 SDK,可以通过蓝牙发送数据,键盘可以单独使用,可以用它做任何你想做的事。