如何跟踪AS3中动态TextField中的一段文本

时间:2012-01-20 18:16:42

标签: actionscript-3 textfield dynamic-text textformat

我希望能够将非样式属性应用于TextField中的文本部分。例如,字符30-45将设置为在某个方向上设置动画。

如果此字段是可编辑的,则如果以任何方式编辑文本,则字符30-45可能不再是30-45。

有人能想出一种优雅的方式来跟踪哪些角色应用了属性吗?

1 个答案:

答案 0 :(得分:3)

我有一个类似的项目,最终扩展了TextField类以满足我的需求。以下是对要做什么的简短描述 - 我的实际代码是保密的,我担心:

  1. 覆盖texthtmlText
  2. 的设置者
  3. 将这些setter中的所有内容解析为自定义对象数组。这些对象中的每一个都包含原始文本块和适用于它们的元数据(格式,注释等)。

    例如,

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

    会被翻译成这样的对象:

    { text:"Info", clazz="sometext", animation:true };
    
  4. 然后使用appendText按原始文本块添加块并使用setTextFormat在每个追加步骤后应用格式化(或执行其他必要的操作)来呈现实际文本输出。
  5. 添加事件侦听器以对TEXT_INPUT和/或KEY_DOWN / KEY_UP事件做出反应以捕获任何新用户输入。 (您将一遍又一遍地替换TextField的整个文本内容,因此不能使用super.text。)
  6. 使用selectionBeginIndexselectionEndIndex处理用户输入(计算对象数组原始文本中的字符数,以找出受影响的块)。直接在容器对象中添加或替换新文本,然后使用步骤3.刷新TextField中的整个文本。
  7. 我还添加了一种方法,可以在渲染数组之前减少数组(即将相邻的块与相同的元数据组合在一起)。这使得数组保持精简并有助于创建没有复杂树结构的XML输出(对于这种情况,一维就是我们所喜欢的)。
  8. 如果您需要其他地方的结果,请覆盖texthtmlText的getter以返回新格式化的信息。我使用htmlText返回一个完全修饰的xml字符串,并保留text来访问原始文本内容,就像在通用TextField中一样。