Flex 4.6 TextInput 提示 ios 行为不端

Posted

技术标签:

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

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

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

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

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

此问题始于 Flex 4.6。

【问题讨论】:

【参考方案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"  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。

以上是关于Flex 4.6 TextInput 提示 ios 行为不端的主要内容,如果未能解决你的问题,请参考以下文章

iOS 上的 Flex 4.6 文本输入键盘

如何在 Flash Builder 4.6 中更新 Flex SDK

Flex 自定义皮肤不调出 IOS 软键盘

在 Flex 中处理 TextInput 的宽度和样式

Flex 3 - 来自 TextInput 的焦点输入/输出

AS3 fl.controls.TextInput 和移动平台