Ionic/Cordova:无法以编程方式触发 iOS 键盘

Posted

技术标签:

【中文标题】Ionic/Cordova:无法以编程方式触发 iOS 键盘【英文标题】:Ionic/Cordova: Can't trigger the iOS keyboard programmatically 【发布时间】:2016-12-06 16:02:15 【问题描述】:

我希望 iosandroid 设备的键盘在 1 秒后在特定文本区域可见时自动打开。

我创建了一个directive,但是iOS 上的键盘没有出现! iOS 10 的键盘是否存在(新)问题?

我的textarea 看起来像:

<textarea rows="20" autocorrect="off" ng-trim="false" focus-me></textarea>

指令看起来像:

app.directive('focusMe', function($timeout) 
  return 
    link: function (scope, element, attrs) 
      $timeout(function () 
        element[0].focus();
        if (window.cordova.plugins.Keyboard && ionic.Platform.isAndroid()) 
          window.cordova.plugins.Keyboard.show(); //open keyboard manually on android
        
      , 1000);
    
  ;
);

在 Android 和浏览器中一切正常,但在 iOS 上没有反应。

【问题讨论】:

【参考方案1】:

我认为您缺少在指令中添加 ionic.Platform.isIOS() 如何设置条件。

您好。

【讨论】:

谢谢。但是 iOS 不需要 window.cordova.plugins.Keyboard.show() 语句。如果我为 iOS 调用这个函数,Xcode 会警告 element.focus() 就足够了。 有人在 PJSIP 上工作吗?从上个月开始我就坚持了这一点 你试试native.keyboardshow。在这里您可以找到更多相关信息:link【参考方案2】:

您是否尝试在 config.xml 中添加此行?

<preference name="KeyboardDisplayRequiresUserAction" value="false" />

【讨论】:

是的,我已经添加了这一行,但它也不起作用。 这是有效的答案。将焦点设置在输入字段上。有时短暂的延迟会有所帮助。像这样: setTimeout(function()$('#toeditfield').focus();,500);【参考方案3】:

您不需要额外的插件来触发键盘。只需将 .focus() 设置为您的输入字段,但会添加一个短暂的延迟。对于 iOS,您还需要将配置选项添加到 config.xml

 setTimeout(function() 
    $('#editfield').focus();
 ,500);

添加到 iOS 的 config.xml:

 <preference name="KeyboardDisplayRequiresUserAction" value="false" />

这适用于我的 iOS 和 Android apache cordova 应用程序。我今天使用 2019 年 11 月 12 日的最新版本进行编译。

【讨论】:

以上是关于Ionic/Cordova:无法以编程方式触发 iOS 键盘的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Objective C 插件返回到 Ionic/Cordova 应用程序时出错

VS2017 - Ionic/Cordova - 无法构建 iOS RemoteBuild - 路径太长

Ionic Cordova构建android无法正常工作

Ionic Cordova 构建失败并出现错误无法应用插件

Ionic Cordova OpenTok 无法从 IOS 发布视频

无法使用 Xcode 8 和 Swift 3 在 SpriteKit 中以编程方式触发 segue