即使连接了硬件键盘,也显示iPhone软键盘

即使连接了硬件键盘,也显示iPhone软键盘,iphone,cocoa-touch,ipad,uikit,keyboard,Iphone,Cocoa Touch,Ipad,Uikit,Keyboard,我的iPad应用程序使用一个充当硬件键盘的外部“设备”。但是,在设置中的某个时候,我需要输入文本,而不能使用“设备”(“设备”不是键盘)。 那么,即使我连接了一个硬件键盘,有没有办法强制弹出软键盘?因为我也有同样的问题,我找到的最接近的解决方案是使用Erica Sadun的应用程序,该应用程序名为cydia和modmyi。它的描述是“即使连接到BT kb,也要使用软kb。” 此外,我还发现,如果你还有一个物理键盘,在我的例子中,通过iPad键盘文档,你可以使用一个键打开键盘,该键似乎映射到蓝牙键

我的iPad应用程序使用一个充当硬件键盘的外部“设备”。但是,在设置中的某个时候,我需要输入文本,而不能使用“设备”(“设备”不是键盘)。
那么,即使我连接了一个硬件键盘,有没有办法强制弹出软键盘?

因为我也有同样的问题,我找到的最接近的解决方案是使用Erica Sadun的应用程序,该应用程序名为cydia和modmyi。它的描述是“即使连接到BT kb,也要使用软kb。”

此外,我还发现,如果你还有一个物理键盘,在我的例子中,通过iPad键盘文档,你可以使用一个键打开键盘,该键似乎映射到蓝牙键盘上的弹出键。也许有一种方法可以像在连接的键盘上按下一样插入这个键


我真希望有一个更正式的编码解决方案来解决这个问题。

目前的SDK无法做到这一点。请通过通知苹果。

是的。我们已经在一些应用程序中实现了这一点,当用户将蓝牙扫描仪“键盘”与设备配对时。您可以做的是确保您的文本字段具有inputAccessoryView,然后自己强制输入inputAccessoryView的框架。这将导致键盘显示在屏幕上

我们向AppDelegate添加了以下两个函数。“inputAccessoryView”变量是UIView*我们在应用程序委托中声明:

//This function responds to all textFieldBegan editing
// we need to add an accessory view and use that to force the keyboards frame
// this way the keyboard appears when the scanner is attached
-(void) textFieldBegan: (NSNotification *) theNotification
{
    UITextField *theTextField = [theNotification object];
    //  NSLog(@"textFieldBegan: %@", theTextField);

    if (!inputAccessoryView) {
        inputAccessoryView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, navigationController.view.frame.size.width, 1)];
    }

    theTextField.inputAccessoryView = inputAccessoryView;

    [self performSelector:@selector(forceKeyboard) withObject:nil afterDelay:0];
}

//Change the inputAccessoryView frame - this is correct for portrait, use a different
// frame for landscape
-(void) forceKeyboard
{
    inputAccessoryView.superview.frame = CGRectMake(0, 759, 768, 265);
}
然后,在ApplicationIDFinishLaunching中,我们添加了这个通知观察者,以便在任何文本字段开始编辑时都可以获得一个事件

    //Setup the textFieldNotifications
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldBegan:) name:UITextFieldTextDidBeginEditingNotification object:nil];

希望有帮助

当我的应用程序连接蓝牙设备时,键盘不会显示。我尝试设置inputAccessoryView的框架,正如Brian Robbins所说。它不起作用

然后我用了一个愚蠢的方法来解决。我发现当我再次点击textfield或textview时,键盘会显示出来。 所以我只需要在textfield或textview中模拟触摸一次,就可以了

如果你想做一些模拟触摸,检查这个。

这里的解决方案在iOS 13上不起作用,或者与App Store不兼容,所以我通过创建自己的软键盘解决了这个问题。这是相当基本的,但工作。请随意贡献

您只需将SoftKeyboardView.swift添加到项目中,然后在某个地方(例如appDidFinishLaunching)点击singleton:

用法:

SoftKeyboardManager.shared.disabled = false

嗨,布莱恩,首先非常感谢你的解决方案。不幸的是,我在拨了几次键盘之后遇到了键盘冻结或整个应用程序崩溃的问题。你有没有同样的问题,或者更好的解决方案?:-)谢谢,我们根本没有看到这种情况发生。我们已经在几十个应用程序中使用了这段代码,这些应用程序在展会上得到了广泛的使用,到目前为止,还没有人提到过这类问题。尽管我尽了最大努力,但我还是不断遇到同一个问题——一定是与我的其他代码存在某种相互依赖性,因为这些代码在不同的应用程序中工作得非常完美。再次感谢您的努力!非常感谢您的解决方案!我想在UIWebView中看到这一点。我只需在UIWebView的子视图中搜索第一个响应者,并替换其inputAccessoryView的superview的框架,它就工作了!:)@BrianRobbins你能帮我解决iOS 8及以上版本的问题吗?我已经实现了相同的解决方案,但是superview(键盘)的框架没有改变。可能是由于自动布局或其他原因。如何使用此项目?谢谢您的提问,@yonathangoriatechnick。我刚刚更新了答案和项目,简单解释了如何使用。非常感谢