【问题标题】:How to close a TextField numeric keyboard on iOS after editing?编辑后如何在 iOS 上关闭 TextField 数字键盘?
【发布时间】:2020-04-05 17:58:03
【问题描述】:

我想编辑像 21.7 这样的数字十进制值,并允许用户在完成后关闭数字键盘(iOS 13.3.1、iPhone Xr)。

我正在使用数字文本字段(TextField 带有约束 TextArea.DECIMAL)。我没有为 TextField 设置选项 putClientProperty("iosHideToolbar", Boolean.TURE)。但是,没有键盘 Done 选项,因此用户在输入值后无法关闭键盘。

我已经浏览了文档 (https://www.codenameone.com/manual/components.html),据我了解,使用 tf.putClientProperty("iosHideToolbar", Boolean.TRUE); 会隐藏工具栏,所以由于我没有设置属性,我假设工具栏和完成按钮应该是可用的。

关于如何获得“完成”按钮(或其他摆脱数字键盘的方法)有什么建议吗?

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    在文本字段的动作监听器中,您可以在文本字段上调用stopEditing()。为此,您可以使用标准操作侦听器或完成侦听器。

    【讨论】:

    • 感谢您的反馈,我正在寻找的不是程序化解决方案,而是键盘上(或更确切地说是在 ios 输入附件视图中)上的“完成”按钮,以便用户自己可以完成后关闭键盘。顺便说一句,我刚刚注意到对于带有普通文本的多行 TextField 没有显示“完成”按钮,因此您的文档似乎不完整
    • @user1246562 也许您的问题的原因在其他地方。看我的回答。
    • 你定义了什么样的构建提示和主题常量?
    【解决方案2】:

    我想编辑一个像 21.7 这样的数字十进制值并启用 用户完成后关闭数字键盘(iOS 13.3.1、iPhone Xr)。

    我正在使用数字文本字段 (TextField 有约束 TextArea.DECIMAL)。我没有设置选项 putClientProperty("iosHideToolbar", Boolean.TURE) 用于文本字段。 但是,没有键盘 Done 选项,因此用户无法关闭 输入数值后的键盘。

    你确定吗?

    我在 iOS 13 (iPhone X) 上尝试了以下代码:

    Form hi = new Form("Example", BoxLayout.y());
    hi.add("Enter a decimal value:");
    TextField textField = new TextField();
    textField.setConstraint(TextArea.DECIMAL);
    hi.add(textField);
    hi.add(new Button("Submit"));
    hi.show();
    

    结果:

    如您所见,此示例代码在 iOS 上生成“完成”按钮。因此,如果您的应用没有显示它,则问题的原因可能在其他地方。

    我刚刚注意到多行没有显示完成按钮 带有普通文本的文本字段

    我试过了:

    Form hi = new Form("Example", BoxLayout.y());
    hi.add("Enter a multiline text:");
    TextArea textField = new TextArea("", 3, 80);
    textField.setConstraint(TextArea.ANY);
    hi.add(textField);
    hi.add(new Button("Submit"));
    hi.show();
    

    结果:

    在这种情况下,还有“完成”按钮。

    目前,据我所知,如果“完成”按钮已经包含在键盘本身中,则它不会显示在 iOS 虚拟键盘工具栏中,例如在没有“下一个”的通用 TextField 的情况下TextField。我的意思是像下面的截图(注意蓝色键“fine”是意大利语的“Done”)

    所以,我不知道如何帮助你。尝试更新您的问题(或尝试打开一个新问题)添加一个能够重现您的问题的自封闭测试用例。

    【讨论】:

    • 非常感谢您通过 Francesco 的回答,很抱歉没有尽快回答(我已经有一段时间没有在设备上构建了)。这真的很奇怪,因为我现在尝试添加与您播种的完全相同的字段,但我仍然没有完成。我还尝试更改 iOS 键盘设置,以防万一,但运气不好。但是,我现在在上面看到了您的注释“我刚刚注意到,对于带有普通文本的多行 TextField,没有显示完成按钮”,这似乎与您的示例相矛盾-您能详细说明一下吗?
    • 回到这一点:我所看到的是,当 TextField 是表单中的 only 输入字段时,完成按钮会显示在 iOS 虚拟键盘中。但是如果还有其他输入字段(似乎不管是在TextField之前还是之后),就没有Done了。我在 CN1 文档中的任何地方都找不到此文档,我非常感谢了解如何控制它(即使有其他输入字段,也基本上强制完成按钮)。我可以探索任何建议或路径吗?
    • 我怀疑您的问题与 tabIndex 有关,此处记录:codenameone.com/blog/right-sidemenu-tab-order.html#_input_cycle 因此,请尝试在所有文本字段上调用 ​​.setTraversable(false),希望每个文本字段都有一个完成按钮.我很想知道它是否有效。
    • 再次感谢 Francesco,非常感谢您提供反馈。我现在试过了,但效果不大(似乎设置 traversable false simple 会使“下一个”跳过该字段)。我尝试了更多,但似乎得到了各种行为,这取决于我不知道是什么。我有点厌倦了花这么多时间(因为只能在设备上测试)应该简单的东西,所以我提交了一份 RFE,希望 CN1 团队能记录下这是如何工作的:github.com/codenameone/CodenameOne/issues/3126
    猜你喜欢
    • 1970-01-01
    • 2017-12-04
    • 2020-05-17
    • 2010-09-21
    • 2020-09-26
    • 2022-10-24
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多