Comunidad de diseño web y desarrollo en internet online

Acceder a un TextField de forma dinamica

Citar            
MensajeEscrito el 18 Ene 2010 02:41 pm
Hola señores.. estoy creando unas cajas de texto desde una funcion privada. Luego quiero acceder al texto de estas cajas pero no puedo. Créanme he buscado hasta el cansancio y no he encontrado una solución buena,

El codigo que utilizo es este

Código ActionScript :

var ti:TextInput=insertarTextInput(1,393,279);// insertarTextInput es una funcion que me da un estilo al TextInput.
var ti_carry:TextInput=insertarTextInput(2,393,279);
ti.name="ti"+_posicion_vector;// _posicion_vector simplemente almacena un numero que incremento mas adelante
ti_carry.name="ti_carry"+_posicion_vector;
addChild(ti);
addChild(ti_carry); 


ahora una forma que encontre para acceder a mi objeto es esta

Código ActionScript :

trace(getChildByName("ti"+_posicion_vector).text); 

pero getChildByName me retorna un objeto DisplayObject, el cual no tiene la propiedad .text
segui buscando y encontre otra forma.

Código ActionScript :

trace((getChildByName("ti"+_posicion_vector) as TextField).text); 

pero tampoco me sirve.

Por favor alguien que me ayude..

Por oxygen2

36 de clabLevel



 

chrome
Citar            
MensajeEscrito el 18 Ene 2010 03:21 pm
para acceder ocuparas una funcion publica , igual para la creacion de los textField puedes usar una funcion privada , en ese metodo crear los textField , llenas el vector con los mencionados, y el metodo publico hace un return de este vector , por ejemplo:


Código ActionScript :

package
{
   import flash.display.Sprite;
   import flash.text.*;
   
   public class MakeTextField extends Sprite
   {
      private var _textField:TextField;
      private var _vecTexts:Array;
      private var _count:uint;
      private var _label:String;
      
      public function MakeTextField(pCount:uint, pLabel:String)
      {
         _count = pCount;
         _label = pLabel;
         build();
      }
      
      private function build():void
      {
         _vecTexts = new Array();
         for(var i:uint=0; i<_count; ++i)
         {
            _textField = new TextField();
            _textField.text = _label + i;
            _textField.width = 30;
            _textField.height = 20;
            _textField.x = _textField.width * i;
            _vecTexts.push(_textField);
            addChild(_textField);
         }
      }
      
      public function getVecText():Array
      {
         return _vecTexts;
      }
   }
}



Código ActionScript :

var makeTextField:MakeTextField = new MakeTextField(10,"tf");
var localVecText:Array = makeTextField.getVecText();

var lenght:uint = localVecText.length;

for(var i:uint=0; i<lenght; ++i)
{
   trace(localVecText[i].text);
}


la otra forma de acceder a objetos privados es atravez de los setters y getters, aunque no se debe de abusar de esta ultima forma.


Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 18 Ene 2010 03:26 pm
si, gracias... aunque pido disculpas porque en el titulo del tema puse "Acceder a un TextField de forma dinamica" y necesito es un TextInput jejeje. Aunque asi sirve..

Por oxygen2

36 de clabLevel



 

chrome
Citar            
MensajeEscrito el 18 Ene 2010 03:32 pm
claro, aun asi funciona :wink: , solo especifica los tipo de TextField , y tambien puedes agregar una propiedad name , que se me paso agregar al codigo por si lo llegas a ocupar.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 19 Ene 2010 07:38 am
Como dice jn_Flash lo "suyo" es tener en unas variables (o vectores) los textField. De cualquier modo, sí podemos seguir usando getChildByName. Lo que ocurre es que deberemos hacer una "conversión de cast" caso de que lo que busquemos sea "algo más" que un displayObject -si queremos usar una propiedad de no tenga un displayObject-

Código ActionScript :

//creamos una variable auxiliar de tipo TextField y 
//le decimos que el getChildByName es de tipo Textfield
var texto:TextField=getChildByName("ti"+_posicion_vector) as TextField  
//podemos usar ahora la variable
trace(texto.text); 

//si lo quieres hacer en una sola línea
trace(TextField(getChildByName("ti"+_posicion_vector)).text)

Por Eliseo2

710 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.