2012-01-20 3 views
1

TextFieldのテキストセクションに非スタイル属性を適用したいと考えています。例えば、文字30-45は、特定の方向にアニメートするように設定されます。AS3のDynamic TextFieldのテキストセクションをどのように追跡することができますか

テキストが編集可能な場合、このフィールドは編集可能です。30-45は30-45にはなりません。

どのキャラクタに属性が適用されたかを把握するためのエレガントな方法は誰も想像できますか?

答えて

3

私は同様のプロジェクトを持っていて、私のニーズに合わせてTextFieldクラスを拡張しました。ここで行うには何の簡単な説明だ - 私の実際のコードが機密である、私は怖い:

  1. オーバーライドtextのためのセッターとhtmlText
  2. は、カスタムオブジェクトの配列にこれらのセッターからの任意のコンテンツを解析します。これらの各オブジェクトには、生のテキストチャンクと、それらに適用されるメタデータ(書式、コメントなど)が含まれています。

    は、例えば、

    <span class="sometext" animation="true">Info</span> 
    

    このようなオブジェクトに変換されるであろう:実際のテキスト出力は、その後、生のテキストのチャンクによりチャンクを追加するappendTextを使用してレンダリングされる

    { text:"Info", clazz="sometext", animation:true }; 
    
  3. と追加するたびにsetTextFormatを使用して書式を適用します(または必要な場合は何でもしてください)。
  4. TEXT_INPUTおよび/またはKEY_DOWN/KEY_UPイベントで反応して新しいユーザー入力を捕捉するイベントリスナーを追加します。 (あなたはTextFieldのテキスト全体を何度も何度も置き換えるので、super.textを使用するオプションではありません)
  5. ユーザ入力はselectionBeginIndexselectionEndIndexを使用して処理されます。どのチャンクが影響を受けているかを知るためのオブジェクト配列)。新しいテキストをコンテナオブジェクト内で直接追加または置換し、手順3を使用してTextField内のテキスト全体を更新します。
  6. レンダリング前に配列を減らす(つまり、隣接するチャンクを同じメタデータで結合する)メソッドを追加しました。これは、配列をリーンに保ち、複雑なツリー構造を持たないXML出力の作成に役立ちます(1次元は、このようなシナリオでは非常に好きです)。
  7. 結果が必要な場合は、texthtmlTextのゲッターをオーバーライドして、新しくフォーマットされた情報を返します。私はhtmlTextを使って完全に装飾されたxml文字列を返し、generic TextFieldのように生のテキストコンテンツにアクセスするためにtextを保持しました。
+0

これは非常に関わっているので、あなたの手順に非常に役立ちます、非常に便利です。 – pixelscript

関連する問題