我遇到的问题是我期待出现多个TextFields,而我只看到一个出现。我把它缩小到这段代码。当我添加List元素时,我看到一个空的矩形,下面有一个确切大小的矩形,正如我所期望的那样。我看到的问题是TextField只出现在第二个矩形中。如果我添加三个元素,则只显示最后一个元素。
以下代码获取DisplayObjects列表(当前是两个TextFields),遍历列表,并为每个代码创建一个容器Sprite。每个容器Sprite都被每个DisplayObject高度的高度偏移,有效地创建了一个可视列表。如果在列表中使用相同的TextField两次或更多次,则TextField仅在最后一个元素中绘制。每个容器Sprite包含一个边界框,表示它存在。
package
{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.geom.Rectangle;
import flash.text.AntiAliasType;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class List extends Sprite
{
private var data:Array=new Array;
private var label:TextField= new TextField();
public function List()
{
super();
label.selectable=true;
label.autoSize = TextFieldAutoSize.LEFT;
label.antiAliasType = AntiAliasType.ADVANCED;
label.text = "Testing";
data.push(label);
data.push(label);
}
public function renderList():void{
var height:int=0;
for (var i:int=0; i< data.length; i++){
//get current sprite in list
var current:DisplayObject=data[i];
//create new sprite to contain element of array
var listItem:Sprite=new Sprite;
listItem.addChild(current);
//draw bounding rectangle for reference
var rect:Rectangle=current.getBounds(this);
listItem.graphics.lineStyle(1, 0x000000);
listItem.graphics.beginFill(0xFFFFFF);
listItem.graphics.drawRect(rect.x, rect.y, rect.width, rect.height);
listItem.graphics.endFill();
//set height corresponding to bounds height
listItem.y=height;
//calculate height for next item
height=height + rect.height;
//add new list item
addChild(listItem);
}
}
}
}
答案 0 :(得分:3)
您不能将同一TextField对象添加为两个或更多容器的子对象。您需要在代码中的某处再次添加new TextField()
。
就像你修改你的构造函数一样,你可以看到两个TextFields
public function List()
{
super();
label.selectable=true;
label.autoSize = TextFieldAutoSize.LEFT;
label.antiAliasType = AntiAliasType.ADVANCED;
label.text = "Testing 1";
data.push(label);
label = new TextField();
label.selectable=true;
label.autoSize = TextFieldAutoSize.LEFT;
label.antiAliasType = AntiAliasType.ADVANCED;
label.text = "Testing 2";
data.push(label);
}
答案 1 :(得分:2)
问题不仅限于TextField,而是DisplayObject。 DisplayObject有许多DisplayObject。 DisplayObject不具有和属于许多'DisplayObject。
由于DisplayObject只能引用一个父项,因此在为同一TextField分配新父项时,第一个Sprite和TextField之间的原始关联将丢失。第二个Sprite成为TextField的父级。