Как удалить динамически созданный TextField в другой функции - PullRequest
1 голос
/ 04 мая 2011

В настоящее время я создаю текстовые поля в цикле for, хотя в этом примере создается только один TextField.

Мои вопросы: как удалить дочерний элемент TextField в другой функции? Что я в основном делаю, так это создаю Textfield, addchild в контейнер -> затем контейнер в другую позицию -> затем removechild и другой текст в контейнере. Я пробовал что-то вроде:

removeChild (getChildByName (myTextField2));

edit: возможно, решение для меня могло бы также просто иметь возможность изменить текст TextField на что-то другое, вместо удаления его и добавления нового.

public function handleTextFrames(numberOfFrames:Number, textFrame1:String, textFrame2:String, textFrame3:String, textFrame4:String):void

    {

        var textArray:Array = new Array(textFrame1,textFrame2,textFrame3,textFrame4);

        // Creating font instance
        var garageInstance:Font = new garage();

        //Creating the textfield object and naming it "myTextField"
        var myTextField:TextField = new TextField();

        //Here we add the new textfield instance to the stage with addchild()
        textContainer.alignContainer1.addChild(myTextField);

        //myTextField.width = 930;
        myTextField.embedFonts = true;
        myTextField.multiline = true;
        myTextField.wordWrap = false;
        myTextField.selectable = false;

        var myText:String = textArray[0];

        myTextField.htmlText = myText;

        //This last property for our textfield is to make it autosize with the text, aligning to the left.
        myTextField.autoSize = TextFieldAutoSize.LEFT;

        //This is the section for our text styling, first we create a TextFormat instance naming it myFormat
        var myFormat:TextFormat = new TextFormat();

        //Embedding font
        myFormat.font = garageInstance.fontName;

        myFormat.color = 0xffffff;
        myFormat.size = 60;
        myFormat.align = TextFormatAlign.CENTER;


        //Now the most important thing for the textformat, we need to add it to the myTextField with setTextFormat.
        myTextField.setTextFormat(myFormat);

        myTextField.y = textContainer.alignContainer1.height * 0.5 - myTextField.textHeight * 0.5;
        myTextField.x = payoffContainer_mc.width / 2 - myTextField.textWidth / 2;
    }

Ответы [ 3 ]

2 голосов
/ 04 мая 2011

Что именно вы хотите сделать?:) Потому что если вы сохраните текстовые поля в «глобальном» массиве, это решит проблему.

Допустим, вы храните его в массиве, называемом textfields.

var textfields:Array = [];

.подтолкнуть все к этому,

textfields.push(textfield);

Затем, в любое время, вы можете удалить это, вызвав эту функцию:

textfields[0].parent.removeChild(textfields[0]);

относительно первого элемента.Во флеше это всегда работает:

INSTANCE.parent.removeChild(INSTANCE);

Помогает ли это?

0 голосов
/ 04 мая 2011

Для одного вместо getChildByName - рассмотрите возможность использования только этого метода:

container["text_field_name"];

Также я рекомендую сделать ваш вызов removeChild () немного более строгим, чтобы избежать ошибок ссылок на нулевые объекты:

var tf:TextField = TextField(container["text_field_name"]);

if(tf.parent) tf.parent.removeChild(tf);

Все, что вам нужно для доступа к вашей функции, из которой вы хотите удалить ее, это «контейнер», который является родительским TextField, и сам TextField.

Hopeэто помогает.

0 голосов
/ 04 мая 2011

Сначала дайте текстовому полю имя:

var myTextField:TextField = new TextField();
myTextField.name = "mytextfield";

Затем вы получите к нему доступ, выполнив следующее:

var myTextField:TextField = textContainer.alignContainer1.getChildByName("mytextfield");

Удалите его:

textContainer.alignContainer1.removeChild(myTextField);
myTextField = null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...