Android、iOS、およびデスクトップで同時に起動するアプリを構築しています。このアプリには、vBulletin システムに関連付けられたログインが含まれており、重大な問題に遭遇しました (クライアントは断固として修正する必要があります)。iOS では、displayAsPassword が true に設定された TextInput に入力すると、入力中にプレーン テキストが表示されます。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 がStageText)。ここで他に何を試すことができるかわかりません。何か案は?
ここで助けてくれてありがとう。
仕様:
- FlashBuilder 4.6 を使用してビルドおよびコンパイルしました (ただし、4.5.1 も利用できます)
- Air 3.1 の使用
- OS X Lion でコンパイル
- 第 1 世代と第 3 世代の両方の iPad でテスト済み
- Flex SDK 4.6.0 の使用