as3复制文本字段而不从舞台上删除它

时间:2010-12-16 00:50:18

标签: flex actionscript-3

我正在尝试复制文本字段。首先,我使用mc.getChildAt(0)获取文本,然后将所有内容复制到新的文本字段中。我遇到的问题是getChildAt从它所在的movieclip中删除了文本字段。如何在不移动文本字段的情况下获取文本字段的属性?或者它可能是别的,我正在做的事情很好。任何见解都将是一个巨大的帮助...

var dupeTField:MovieClip = duplicateTextField($value.sourceImg.getChildAt(0));

private function duplicateTextField($textField):MovieClip
        {
            var currTextField:TextField = $textField;
            var dupeTextHolder:MovieClip = new MovieClip();
            var dupeTextField:TextField = new TextField();
            dupeTextField.text = currTextField.text;
            dupeTextField.textColor = currTextField.textColor;
            dupeTextField.width = $textField.width;
            dupeTextField.height = $textField.height;
            dupeTextHolder.addChild(dupeTextField);


            return dupeTextHolder;

        }

3 个答案:

答案 0 :(得分:2)

使用类似的东西:

package com.ad.common {
    import flash.text.TextField;
    import flash.utils.describeType;

    public function cloneTextField(textField:TextField, replace:Boolean = false):TextField {
        var clone:TextField = new TextField();
        var description:XML = describeType(textField);
        for each (var item:XML in description.accessor) {
            if (item.@access != 'readonly') {
                try {
                    clone[item.@name] = textField[item.@name];
                } catch(error:Error) {
                    // N/A yet.
                }
            }
        }
        clone.defaultTextFormat = textField.getTextFormat();
        if (textField.parent && replace) {
            textField.parent.addChild(clone);
            textField.parent.removeChild(textField);
        }
        return clone;
    }
}

答案 1 :(得分:1)

我想你会发现你的问题出在其他地方。 getChildAt不会将其目标从其父目录中移除,并且您发布的功能与我所宣传的一样,创建了一个重复的剪辑,而不会影响原始剪辑。

答案 2 :(得分:0)

    private var dupeTField:MovieClip;

    private function init():void
    {         
        //getChildAt will return a DisplayObject so you
        //should cast the return DisplayObject as a TextField
        var tf:TextField = $value.sourceImg.getChildAt(0) as TextField;

        dupeTField = duplicateTextField(tf);

        //don't forget to add your duplicate to the Display List
        //& make sure to change the x, y properties so that 
        //it doesn't sit on top of the original
        addChild(dupeTField ); 

    }

    private function duplicateTextField(textField:TextField):MovieClip
    {
        var dupeTextHolder:MovieClip = new MovieClip();
        var dupeTextField:TextField = new TextField();

        //if you pass a TextField as a parameter, you don't need to
        //replicate the instance inside the function, simply access the
        //parameter directly.
        //You may consider copying the TextFormat as well
        dupeTextField.defaultTextFormat = textfield.defaultTextFormat;

        dupeTextField.text = textField.text;
        dupeTextField.textColor = textField.textColor;
        dupeTextField.width = textField.width;
        dupeTextField.height = textField.height;

        dupeTextHolder.addChild(dupeTextField);


        return dupeTextHolder;

    }