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

时间:2017-03-13 20:57:38

标签: ios objective-c ipad keyboard uitextfield

我的情况摘要

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

我正在使用IPad Air 2.

到目前为止我做了什么

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

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

这大部分都有效,但它离开了键盘的顶部: enter image description here

我已尝试通过删除textfields委托方法中的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];

    }

}

3 个答案:

答案 0 :(得分:1)

如果隐藏的UITextField永远不会真正需要用户输入,只需将其设为隐藏的UILabel,或者只将数据存储在String变量中,而不是存储在任何UI对象中所有

答案 1 :(得分:0)

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
            }
    }
}

上面的代码会将键盘隐藏在主窗口界限之外......

希望这有帮助

答案 2 :(得分:0)

不幸的是你不能完全摆脱键盘。我所做的是使用套接字条形码扫描器,链接在这里:https://www.socketmobile.com/home/?languageRedirect=true

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