Actionscript 3 在运行时将textfield设置为可编辑
我有一个文本字段,按下按钮后应该可以编辑:Actionscript 3 在运行时将textfield设置为可编辑,actionscript-3,apache-flex,Actionscript 3,Apache Flex,我有一个文本字段,按下按钮后应该可以编辑: playerName = new TextField(); playerName.autoSize = "left"; playerName.styleSheet = styleSheet; playerName.type = TextFieldType.DYNAMIC; playerName.tabEnabled = false; playerName.maxChars = 14; playerName.background =
playerName = new TextField();
playerName.autoSize = "left";
playerName.styleSheet = styleSheet;
playerName.type = TextFieldType.DYNAMIC;
playerName.tabEnabled = false;
playerName.maxChars = 14;
playerName.background = false;
playerName.backgroundColor = 0x1e904b;
...
var boldStyleObject:Object = {};
boldStyleObject.fontSize = 12;
boldStyleObject.fontFamily = "Verdana";
boldStyleObject.color = "#ffffff";
boldStyleObject.fontWeight = "bold";
styleSheet.setStyle(".bold", boldStyleObject);
boldStyleName = "bold";
...
playerName.htmlText = "<span class='" + boldStyleName + "'>" + player.name + "</span>";
...
private function ChangeName (event:Event):void
{
playerName.type = TextFieldType.INPUT;
playerName.background = true;
playerName.addEventListener(KeyboardEvent.KEY_DOWN, DoneEditing);
stage.focus = playerName;
}
...
private function DoneEditing (event:KeyboardEvent):void
{
var target:TextField = event.target as TextField;
if (event.keyCode == 27)
{
target.text = editBackup;
DisactivateTextField(target);
}
else if (event.keyCode == 13 && target == playerName && playerName.text.length > 3)
{
DisactivateTextField(target);
}
}
private function DisactivateTextField(field:TextField):void
{
field.type = TextFieldType.DYNAMIC;
field.background = false;
field.removeEventListener(KeyboardEvent.KEY_DOWN, DoneEditing);
}
playerName=newtextfield();
playerName.autoSize=“左”;
playerName.styleSheet=样式表;
playerName.type=TextFieldType.DYNAMIC;
playerName.tabEnabled=false;
playerName.maxChars=14;
playerName.background=false;
playerName.backgroundColor=0x1e904b;
...
var boldStyleObject:Object={};
boldStyleObject.fontSize=12;
boldStyleObject.fontFamily=“Verdana”;
boldStyleObject.color=“#ffffffff”;
boldStyleObject.fontwweight=“bold”;
样式表.setStyle(“.bold”,boldStyleObject);
boldStyleName=“bold”;
...
playerName.htmlText=“+player.name+”;
...
私有函数ChangeName(事件:事件):void
{
playerName.type=TextFieldType.INPUT;
playerName.background=true;
playerName.addEventListener(KeyboardEvent.KEY_向下,不编辑);
stage.focus=playerName;
}
...
私有函数未初始化(事件:KeyboardEvent):无效
{
变量目标:TextField=event.target作为TextField;
如果(event.keyCode==27)
{
target.text=editBackup;
禁用文本字段(目标);
}
else if(event.keyCode==13&&target==playerName&&playerName.text.length>3)
{
禁用文本字段(目标);
}
}
私有函数DisactivateTextField(字段:TextField):无效
{
field.type=TextFieldType.DYNAMIC;
field.background=false;
field.removeEventListener(KeyboardEvent.KEY_向下,不需要编辑);
}
除了TextField的可编辑性之外,所有的工作都很好。为什么?按下按钮需要一个
MouseEvent
,因此请确保将正确的事件侦听器添加到按钮中。此外,请确保您正在检查用户输入以终止编辑或评估输入本身
private function something():void {
yourBtn.addEventListener(MouseEvent.CLICK,ChangeName);
}
private function ChangeName(e:MouseEvent):void {
playerName.type = TextFieldType.INPUT;
playerName.background = true;
playerName.addEventListener(KeyboardEvent.KEY_DOWN,DoneEditing);
stage.focus = playerName;
}
private function DoneEditing(e:KeyboardEvent):void {
if (e.keyCode == Keyboard.ENTER) {
// do your magic here
}
}
问题是html样式。由于某些原因,通过样式表设置样式的带有htmlText的
TextField
无法编辑。您应该使用TextField.defaultTextFormat
属性来设置您不需要编辑的文本的样式。感谢您的响应,但它可以正常工作,不需要考虑TextField的可编辑性。我编辑了一个问题,请看一看。哦,是的。不过,您仍然可以使用textformat实例playerName.defaultTextFormat=新的TextFormat('Verdana',12,0xffffff,true)
请注意,defaultTextFormat
属性适用于设置后添加的文本。