【问题标题】:Flex 4.6 TextInput with prompt on ios misbehavesFlex 4.6 TextInput 提示 ios 行为不端
【发布时间】:2012-06-10 09:45:03
【问题描述】:

在 ios 上,TextInput 很奇怪。以下代码:

        <s:TextInput id="password" width="100%" displayAsPassword="true"
                     needsSoftKeyboard="true" 
                     prompt="Password"  
                     softKeyboardType="default"
                     returnKeyLabel="done"
                     autoCorrect="false"
                     skinClass="spark.skins.mobile.TextInputSkin"
                     />

当我选择 textInput 时,提示按预期消失,但第一个字符是自动选择的。当第二个键被按下时,第一个字符被删除。这只发生在输入第一个字符并且该字段有提示消息时。 “自动更正”似乎没有任何作用。

有人知道这个问题的解决方法吗?我查看了 SkinnableTextBase 类,但找不到任何有罪的代码。

此问题始于 Flex 4.6。

【问题讨论】:

    标签: ios apache-flex prompt textinput autocorrect


    【解决方案1】:

    在编写 Flex 代码数小时后,我终于意识到 Flex 不是问题所在。 Air 3.2(也在 Air 3.3 测试版中出现此问题。如果我使用 Air 3.1 编译,一切正常。

    我尝试了各种方法,但似乎无法在 Air 3.2 + 中修复它。我检查了我的其他项目,似乎我所有使用 Air 3.2 编译的应用程序都有类似的问题:(

    [更新]

    问题出在 Flex SDK 中的 SkinnableTextBase.as 中。

    当调用 textDisplay_changeHandler(event:Event) 时,invalidateSkinState() 会导致问题。如果您将皮肤的状态设置为空(“”),它会起作用:

    skin.currentState = "";
    invalidateSkinState();
    

    问题是主题没有正确更新(而且是 h@ck)。

    如果您在 CSS 中将 "showPromptWhenFocused" 设置为 false,则问题不会发生;唯一的副作用是当您选择 textInput 时提示会消失。

    s|TextInput
    {
        skinClass:ClassReference("spark.skins.mobile.TextInputSkin");
        showPromptWhenFocused: false;
    }
    

    希望这对某人有所帮助。

    【讨论】:

    • 太糟糕了,这个问题在 AIR 3.5 中仍然非常存在。正是这些小事使 Flex 对于严肃的企业应用程序开发越来越不可行。也许 Adob​​e 放弃了它,因为他们发现该框架一开始并不真正适合移动设备。就是缺点太多了。
    • 你拯救了我的一天,为此 +1,tnx。我不同意 Flex 对企业来说越来越不可行,我会说相反。最近 AIR SDK 更新确实发生了很多变化。你必须知道,Adobe 正在覆盖 2 个最大的桌面和移动操作系统,只有 1 个 SDK,没有人可以做得更好,没有 html5/任何组合可以击败它。 iPhone5和iPad Mini刚上市就得到支持。然而,我同意你会在这里和那里发现那些令人讨厌的小错误,但这总是存在于每个框架中的可能性,而不仅仅是 AIR SDK。
    • 我还没有看到这个;但最有可能的问题在于 StageText 与 Flash TextField。使用旧的 TextInputSkin 切换回 TextField
    【解决方案2】:

    使用 FB4.6 和 Air3.5 解决了带有火花皮肤的 Textinput 的飞行问题。我认为实际的问题来自Air。但是现在软键盘在聚焦时没有激活。

    <s:TextInput id="mail"  softKeyboardType="email" skinClass="spark.skins.spark.TextInputSkin" />
    

    【讨论】:

      【解决方案3】:

      你在滚动 TextInput 吗?如果没有,您可以使用新的 Flex 4.6 TextInput 移动皮肤。新皮肤使用 StageText 可以解决您的问题。删除属性 skinClass="spark.skins.mobile.TextInputSkin" 并且它应该默认为新皮肤。

      <s:TextInput id="password" width="100%" displayAsPassword="true"
                       needsSoftKeyboard="true" 
                       prompt="Password"  
                       softKeyboardType="default"
                       returnKeyLabel="done"
                       autoCorrect="false"
                       />
      

      注意:如果滚动 TextInput,StageText 将无法正确呈现,您必须使用当前的 Flex 4.5 移动皮肤。

      【讨论】:

      • 我没有滚动文本。您不使用“spark.skins.mobile.TextInputSkin”皮肤是正确的。问题是,如果您不使用移动皮肤,StageText 会被绘制在其他所有内容之上。包括对话框。这不酷:(
      • 我还必须提到,使用移动皮肤并使用 Air 3.1 进行编译可以按预期工作。该问题仅存在于 Air 3.2 +。我在想问题可能出在 IOS 上,但 Air 的版本似乎是问题的核心。由于 stage3D 功能,我真的需要使用 Air 3.2。
      猜你喜欢
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 2013-09-29
      相关资源
      最近更新 更多