Я решил собственную проблему, используя свойства background
и border
из TextField.Вместо того, чтобы создавать TextField непосредственно в моем MovieClip, я создаю его динамически.
// Field 'Name' of the layer
var tarea:TextField = new TextField();
tarea.text = 'Layer';
tarea.x = -80;
tarea.y = -23;
tarea.type = TextFieldType.DYNAMIC;
tarea.height = 20;
// Format the TextField
var format_tarea:TextFormat = new TextFormat();
format_tarea.font = "Arial";
format_tarea.size = 14;
format_tarea.bold = true;
tarea.setTextFormat(format_tarea,0,tarea.length);
Затем я добавляю несколько слушателей, чтобы разрешить изменения, когда я нажимаю на него:
// Add event to allow name changes
tarea.addEventListener(MouseEvent.CLICK,changeName);
Когда янажмите клавишу ВВОД, я принимаю изменения
// Add event to accept changes on press ENTER key
tarea.addEventListener(KeyboardEvent.KEY_DOWN,acceptKeyboardName);
Когда TextField потерял фокус, также принимаем изменения:
tarea.addEventListener(FocusEvent.FOCUS_OUT,acceptFocusName);
Последнее, я добавил в свой MovieClip
// Add to MC
mc.addChild(tarea);
Обработчики, связанные с нижеприведенными событиями:
private function changeName(e:MouseEvent):void
{
e.target.setSelection(0,e.target.text.length);
e.target.border = true;
e.target.background = true;
e.target.type = TextFieldType.INPUT;
}
private function acceptKeyboardName(e:KeyboardEvent):void
{
if (e.charCode == 13) // When pres ENTER, remove border, background and restore dynamic type
{
e.target.type = TextFieldType.DYNAMIC;
e.target.border = false;
e.target.background = false;
}
}
private function acceptFocusName(e:FocusEvent):void
{
// When lost focus, remove border, background and restore dynamic type
e.target.type = TextFieldType.DYNAMIC;
e.target.border = false;
e.target.background = false;
}