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
属性适用于设置后添加的文本。