Flex 4.5.1+AIR 3.1 Mac版本 s:TextInput 第一个中文字符无法获取的解决

阅读更多
设置了textinput提示字符串,但是默认是只要空间获得焦点是便不显示提示字符串了,这样很多时候用户忘记了提示的内容,最好能在输入第一个字符后再隐藏提示字符串。所以监听了valueCommit事件,在响应中更新空间皮肤状态,当有输入字符时隐藏提示字符串。
override protected function childrenCreated():void
		{
			super.childrenCreated();
			
			//watch for programmatic changes to text property
			this.addEventListener(FlexEvent.VALUE_COMMIT, textChangedHandler, false, 0, true);
		}
protected function textChangedHandler(e:Event):void {
			dispatchEvent(new Event('textChanged'));
			invalidateSkinState();
		}
override protected function getCurrentSkinState():String
		{
			if(prompt && text.length == 0)
			{
				if (enabled && skin && skin.hasState("normalWithPrompt"))
					return "normalWithPrompt";
				if (!enabled && skin && skin.hasState("disabledWithPrompt"))
					return "disabledWithPrompt";
			}
			
			return enabled ? "normal" : "disabled";;
		}

用mac版QQ输入法输入第一个字符后,发现提示字符串并没有,输入的字被提示字符串挡上了。调试发现,text属性值仍然为"",参考 http://www.iteye.com/topic/1113987重写text属性,问题就可以解决了
override public function get text():String
		{
			if(textDisplay)
			{
				var obj:Object = TextConverter.export((textDisplay as RichEditableText).textFlow, 
					TextConverter.PLAIN_TEXT_FORMAT, ConversionType.STRING_TYPE);
				return obj ? obj.toString() : '';
			}
			return '';
		}

你可能感兴趣的:(flex,air,textinput,输入法,兼容性)