AS3.0关于TextField那些事

TextField是个强大的组件,大量的文字操作可以在其中完成。这次我在制作文本编辑器的时候发现了它几个不太显眼的特性,特此罗列加以记忆,也可以让和我一样遇到相应问题的朋友可以一起借鉴讨论。

  1. TextField的defaultTextFormat属性和DisplayObject的Filter属性一样是一个对象副本,而非引用。所以任何通过this.objTextField.defaultTextFormat.属性名 = XXXX 的修改都是无效的,需要重新new一个textFormat并赋值。
  2. TextField的selectionBeginIndex和selectionEndIndex属性标示了被选中字段的启始和终止游标,但是这个游标是包首不包尾的,比如selectionBeginIndex为1,selectionEndIndex为75,其实是1-74字母被选中了,75字符未选中
  3. TextField可以侦听TextEvent.TEXT_INPUT事件,该事件可以获得当前输入的字符(event.text),但是,如果你在此时去获取TextField的careIndex属性(当前游标位置),所获得的是为输入字符前的游标位置,除非你使用了输入法,即当使用类似智能ABC这样的输入法的时候,此时所获取的careIndex为输入后的游标位置。这就为制作部分功能带来了麻烦,可以使用这样的办法解决问题:仅在TextEvent.TEXT_INPUT事件中记录输入的文字,而在Event.CHANGE事件中记录光标位置,因为TEXT_INPUT之后一定触发CHANGE事件且此时光标位置一定在输入文字之后。也可以通过IME类来判断用户是否使用了输入法来分开处理,不过可能会更加复杂。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AS3.0 TLFTextField 最新的组件库 以往的有BUG,这个可是最新的哦 package { import fl.controls.UIScrollBar; import fl.text.TLFTextField; import flash.events.Event; import flashx.textLayout.conversion.TextConverter; import flashx.textLayout.edit.IEditManager; import flashx.textLayout.elements.FlowElement; import flashx.textLayout.elements.InlineGraphicElement; import flashx.textLayout.elements.ParagraphElement; import flashx.textLayout.elements.TextFlow; import flashx.textLayout.events.CompositionCompleteEvent; import flashx.textLayout.events.StatusChangeEvent; /** * 使用 TLFTextField 类创建使用文本布局框架 (TLF) 的高级文本显示功能的文本字段。 * TLFTextField 对象与 TextField 对象类似,但 TLFTextField 对象可以利用 flashx 包中包含的 TLF 类的属性和方法。TLF 提供了大量格式选项和功能。 * @author */ public class STLFTextField extends TLFTextField { //最大段落数 private var _maxParagraph:uint = 0; //UI滚动条 private var uiScrollBar:UIScrollBar; public function STLFTextField() { super(); } private function tlfEventHandle(e:Event):void { super.textFlow.flowComposer.updateAllControllers(); if (uiScrollBar) { uiScrollBar.scrollPosition = uiScrollBar.maxScrollPosition; uiScrollBar.validateNow(); } } /** * 过滤段落数达到最大值时文本的段落 */ private function filtrationPar():void { if (_maxParagraph == 0) return; if (textFlow.numChildren > _maxParagraph) { for (var i:uint = 0; i < textFlow.numChildren - _maxParagraph; i++ ) { textFlow.removeChildAt(0); } } } /** * 在文本中插入图片 * @param src 图片的路径或者库里面的MC实例 * @param width 图片的宽,默认是图片宽度 * @param height 图片的高,默认是图片的高度 */ public function insertImg(src:Object, width:Object = "auto", height:Object = "auto"):void { if(!textFlow.hasEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE)) super.textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE, tlfEventHandle); if(super.textFlow.interactionManager is IEditManager) { IEditManager(super.textFlow.interactionManager).insertInlineGraphic(

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值