Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DanielGianni

Acessando textinput criados dinamicamente

Recommended Posts

Considerando que tenho 2 elementos do tipo button inseridos manualmente no stage.

 

Quando eu clico em qualquer um deles eu abro como se fosse um menu pulldown, mas na verdade são textinputs criados dinamicamente.

 

Para ilustrar olhem o código:

 

fr001_ch001.addEventListener(MouseEvent.MOUSE_DOWN, criaOpcoes);
fr001_ch002.addEventListener(MouseEvent.MOUSE_DOWN, criaOpcoes);

function criaOpcoes(e:MouseEvent) {
	
var opcao1:TextField = new TextField();
var opcao2:TextField = new TextField();
opcao1.type = TextFieldType.DYNAMIC;
opcao1.width = 100;
opcao1.height = 20;
opcao1.background = true;
opcao1.border = true;
opcao1.type = TextFieldType.DYNAMIC;
opcao1.text = "opção 1";
opcao1.x = e.target.x + e.target.width + 5;
opcao1.y = e.target.y + opcao1.height + 5;

opcao2.type = TextFieldType.DYNAMIC;
opcao2.width = 100;
opcao2.height = 20;
opcao2.background = true;
opcao2.border = true;
opcao2.type = TextFieldType.DYNAMIC;
opcao2.text = "opção 2";
opcao2.x = e.target.x + e.target.width + 5;
opcao2.y = opcao1.y + opcao2.height + 2;

//
// TODO: - adicionar listener para monitorar o click em qualquer um dos inputtext criados dinamicamente
//         quando clicado preencher o objeto de retorno com a opção clicada. (transformar isso em uma classe
//         de forma que o retorno esteja disponível em um objeto por um get.
//       - antes de criar os inputtext deve-se apagar todos os outros criados dinamicamente na tela.
//
addChild(opcao1);
addChild(opcao2);
e.target.removeEventListener(MouseEvent.MOUSE_DOWN, criaOpcoes);

};

Para evitar de clicar mais de uma vez sem efetuar uma escolha, eu removo o evento de clique de quem chamou (no caso é o listener do botão inserido manualmente no stage).

 

Até aqui tudo bem, tudo tranquilo!

 

Agora... rsrs ....

 

Toda vez que eu for criar esses textinputs dinamicamente eu teria que apagar quaisquer outros que já existam na tela (situação que acontece quando o usuário já clicou em um botão, foram criados os textinputs dinamicamente, mas sem escolher nenhum dos textinputs dinamicos ela clicou no outro botão que repetiu o processo)

 

Minha dúvida de forma reduzida é:

 

- como eu posso dentro desse evento remover todos os outros textinputs criados dinamicamente???

- os elementos criados dinamicamente recebem qual nome???

- como eu consigo acessar uma instância de um objeto criado dinamicamente fora do local onde foi criado (classe)???

 

Eu poderia criar um array na timeline e adicionar o nome dos elementos criados, mas não sei como funciona isso na minha cabeça vai ser um monte de instância com o mesmo nome: opcao1 e opcao2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Milhares de mensagens de erros depois..... + 2 aspirinas!

 

 


var instancias:Array = new Array();

fr001_ch001.addEventListener(MouseEvent.MOUSE_DOWN, criaOpcoes);
fr001_ch002.addEventListener(MouseEvent.MOUSE_DOWN, criaOpcoes);

function criaOpcoes(e:MouseEvent):void {
	
var opcao1:TextField = new TextField();
var opcao2:TextField = new TextField();
opcao1.type = TextFieldType.DYNAMIC;
opcao1.width = 100;
opcao1.height = 20;
opcao1.background = true;
opcao1.border = true;
opcao1.type = TextFieldType.DYNAMIC;
opcao1.text = "opção 1";
opcao1.x = e.target.x + e.target.width + 5;
opcao1.y = e.target.y;// + opcao1.height + 5;

opcao2.type = TextFieldType.DYNAMIC;
opcao2.width = 100;
opcao2.height = 20;
opcao2.background = true;
opcao2.border = true;
opcao2.type = TextFieldType.DYNAMIC;
opcao2.text = "opção 2";
opcao2.x = e.target.x + e.target.width + 5;
opcao2.y = opcao1.y + opcao2.height + 2;
addChild(opcao1);
addChild(opcao2);
this.instancias.push(opcao1); // <================================= OLHA O SEGREDO AQUI - eu coloco a instância do objeto em um Array que está na timeline
this.instancias.push(opcao2);
e.target.removeEventListener(MouseEvent.MOUSE_DOWN, criaOpcoes);
opcao1.addEventListener(MouseEvent.CLICK, teste);
opcao2.addEventListener(MouseEvent.CLICK, teste);

};

function teste(e:MouseEvent):void {

	e.currentTarget.addEventListener(MouseEvent.MOUSE_DOWN, criaOpcoes);  // <====== NOVO PROBLEMA - não consigo voltar a ação para o botão que criou
                                                                              //                         os inputtext   
	trace("clicou em " + e.target.name);
	for (var i:uint=0; i<instancias.length; i++) {
		trace("--"+instancias[i].name);
			this.removeChild(instancias[i]); // remove as instâncias usando o Array
	}
	instancias = new Array(); // Garante que não vai dar erros por alguma instância estar nula. 
                                  // E se fechar 1 textinput fecha todos os outros... é o que eu precisava!
}

 

PS.: Me refiro aos TextField como inputtext porque no final das contas eu vou usar eles, mas para facilitar nos testes estou usando dynamic text

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.