我正在构建一个应用程序以同时在 Android、iOS 和桌面上启动。该应用程序包含一个附加到 vBulletin 系统的登录信息,我遇到了一个重大问题(客户坚持必须修复)。在 iOS 上,如果您输入的 TextInput 的 displayAsPassword 设置为 true,它会在输入时显示纯文本。一旦您单击 TextInput,它就会正确显示。
这是我在 Flex 中使用的代码
<s:TextInput id="inputField" width="100%" styleName="loginFields" text="Password" focusAlpha="0" focusEnabled="false" autoCorrect="false" />
然后我将焦点事件附加到运行这些函数的输入字段。
private var defaultText:String = 'Password';
private var passwordDisplay:Boolean = true;
private function focusIn (e:FocusEvent = null):void {
if (this.inputField.text == this.defaultText){
this.inputField.text = '';
}
if (this.passwordDisplay){
this.inputField.displayAsPassword = true;
}
}
private function focusOut (e:FocusEvent = null):void {
if (this.inputField.text == ''){
this.inputField.text = this.defaultText;
if (this.passwordDisplay){
this.inputField.displayAsPassword = false;
}
}
}
文件中有更多代码,但这是唯一相关的。基本上,在聚焦时,它会检查文本是否 == 默认文本。如果是这样,它将清空该字段。然后它将 displayAsPassword 设置为 true。聚焦时,它会检查该字段是否为空。如果是,它会将字段重置为默认值并将 displayAsPassword 重置为 false。我知道默认文本是内置的,但我需要的功能比它提供的更多。
现在,此问题(当焦点位于字段上时密码显示为纯文本)仅存在于 iOS中,并且不会出现在模拟器中。它可以在 Android 和桌面上完美运行并符合预期。我尝试手动重新创建功能(可能但不理想,因为 caretIndex 不是 TextInput 属性),我尝试隐藏 TextInput 并覆盖与输入长度匹配的“•”字段(不可能,因为 TextInput 是舞台文字)。我不确定我还能在这里尝试什么。有任何想法吗?
在此先感谢您的任何帮助。
眼镜:
- 使用 FlashBuilder 4.6 构建和编译(但我也有 4.5.1 可用)
- 使用空气 3.1
- 在 OS X Lion 上编译
- 在第一代和第三代 iPad 上测试
- 使用 Flex SDK 4.6.0