我的MovieClip中有一个TextArea组件。当我双击它时,我想切换到TextField组件,允许我更改其内容。当我在外面点击时,我想重新启动它的原始类(TextArea)。
我该怎么做?
我这样做,但没有奏效:
element.addEventListener(MouseEvent.DOUBLE_CLICK, changeName);
private function changeName(e:MouseEvent):void{
e.target.type = TextFieldType.INPUT;
}
其中element
是TextArea(clasic和动态文本)。谢谢!
修改
这就是我的MovieClip的样子。 “名称”是我想允许用户更改的TextArea。我这样设置:
[西班牙语界面]
MovieClip控制我自己的基类(称为'ConfLayer')。在里面我有这个:
public function doStuff(e:MouseEvent):void{
// element = TextArea 'Name'
element.addEventListener(MouseEvent.DOUBLE_CLICK, changeName);
}
private function changeName(e:MouseEvent):void {
var tarea:TextArea = e.target as TextArea;
var tf:TextField = tarea.TextField; // this line throwing error
tf.type = TextFieldType.INPUT;
}
因为AS3给了我错误,我尝试了这个:
private function changeName(e:MouseEvent):void {
e.target.TextField.type = TextFieldType.INPUT;
}
当我双击TextArea元素时,前一个字符串将被删除,我无法写任何内容。
答案 0 :(得分:0)
根据我上面的评论,TextArea有一个文本字段属性。
所以你应该可以这样做:
private function changeName(e:MouseEvent):void{ var tarea:TextArea = e.target as TextArea; var tf:TextField = tarea.textField; //make sure that textfield is camelCase!!! tf.type = TextFieldType.INPUT; }
答案 1 :(得分:0)
只有在第二次点击后才能进行字段编辑。我的想法是,这是为时已晚。该字段是可编辑的,但您需要再次单击。因此,在第一次点击后尝试使用一段时间(例如300英里)。如果没有单击,则将类型设置回DYNAMIC。第二次单击后,您将开始编辑文本字段。
答案 2 :(得分:0)
我使用TextField中的background
和border
属性解决了我自己的问题。我不是直接在我的MovieClip上创建TextField,而是动态创建它。
// 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);
按ENTER键时,我接受更改
// 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;
}