某日接到用户在界面中的一个textArea中限制输入,他的要求是不给出具体允许输入的字符数(不关心字数),在固定宽高的textArea中,只允许输入3行。flexSDK3.3中只对具体最大字符数(maxChars)提供了限制,而对于行数的限制,并未支持。苦思冥想,最终找到解决方案,见下方代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
<![CDATA[
private var oldStr:String; //用于限制输入3行
private function textChangeHandler():void {
var tf:TextField = myTextArea.mx_internal::getTextField()
var numLines:uint = tf.numLines;
if(numLines > 3){
myTextArea.text = oldStr;
}
oldStr = myTextArea.text;
}
]]>
</mx:Script>
<mx:TextArea id="myTextArea"
wordWrap="true"
width="100"
height="150"
leading="20"
verticalScrollPolicy="off"
change="textChangeHandler()">
</mx:TextArea>
</mx:Application>
到此功能已经实现,不过在这个过程中,无意中发现了flex之TextArea的一个bug,即你设置wordWrap为true后,假若你在一行中一直空格到底,TextArea是不会自动换行的,他会一直空格下去,你按向左的方向键,这时候光标右会慢慢回来。如有疑问,你可以稍微尝试着玩一下