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 对于严肃的企业应用程序开发越来越不可行。也许 Adobe 放弃了它,因为他们发现该框架一开始并不真正适合移动设备。就是缺点太多了。 你拯救了我的一天,为此 +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 行为不端的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flash Builder 4.6 中更新 Flex SDK