TextField是个强大的组件,大量的文字操作可以在其中完成。这次我在制作文本编辑器的时候发现了它几个不太显眼的特性,特此罗列加以记忆,也可以让和我一样遇到相应问题的朋友可以一起借鉴讨论。
- TextField的defaultTextFormat属性和DisplayObject的Filter属性一样是一个对象副本,而非引用。所以任何通过this.objTextField.defaultTextFormat.属性名 = XXXX 的修改都是无效的,需要重新new一个textFormat并赋值。
- TextField的selectionBeginIndex和selectionEndIndex属性标示了被选中字段的启始和终止游标,但是这个游标是包首不包尾的,比如selectionBeginIndex为1,selectionEndIndex为75,其实是1-74字母被选中了,75字符未选中
- TextField可以侦听TextEvent.TEXT_INPUT事件,该事件可以获得当前输入的字符(event.text),但是,如果你在此时去获取TextField的careIndex属性(当前游标位置),所获得的是为输入字符前的游标位置,除非你使用了输入法,即当使用类似智能ABC这样的输入法的时候,此时所获取的careIndex为输入后的游标位置。这就为制作部分功能带来了麻烦,可以使用这样的办法解决问题:仅在TextEvent.TEXT_INPUT事件中记录输入的文字,而在Event.CHANGE事件中记录光标位置,因为TEXT_INPUT之后一定触发CHANGE事件且此时光标位置一定在输入文字之后。也可以通过IME类来判断用户是否使用了输入法来分开处理,不过可能会更加复杂。