【问题标题】:Is it possible to have a UITextField selected without a keyboard present?是否可以在没有键盘的情况下选择 UITextField?
【发布时间】:2017-08-04 00:54:45
【问题描述】:

我的情况总结

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

我使用的是 iPad Air 2。

到目前为止我做了什么

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

_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];
            
    }
        
}

【问题讨论】:

    标签: ios objective-c ipad keyboard uitextfield


    【解决方案1】:

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

    【讨论】:

    • 问题是我需要条形码扫描仪读取数据,而条形码扫描仪充当外部键盘。我不能以这种方式将数据写入标签
    【解决方案2】:

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

    他们有一个 SDK,可以通过蓝牙发送数据,而键盘则可以随心所欲地做任何事情。

    【讨论】:

      【解决方案3】:

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

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

      希望对你有帮助

      【讨论】:

      • 我认为我无法操作 UIWindow 的框架。我尝试在 UIKeyboardWillShowNotification 中删除 UIRemoteKeyboardWindow,但没有任何反应。然而,在它出现一瞬间后,我能够在 UIKeyboardDidShowNotification 中将其删除。没有更好的方法吗?
      • 删除 UIRemoteKeyboardWindow 是危险的,因为这种方法破坏了 UITextField 生命周期......我在 iPhone 5S 上尝试了我的代码,但键盘不再显示,使用 UIKeyboardWillShowNotification 在它出现之前将其移到一边......不确定您是否尝试过以及在什么设备上..
      • 我能够修改框架并且键盘不再显示,但是它在键盘中创建了一堆破坏的约束。我应该担心这些被破坏的约束吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2012-07-22
      相关资源
      最近更新 更多