Хммм, хитрый.
Я пытался решить это чисто, но Flash не позволил бы мне так легко.
Основная идея состоит в том, чтобы установить стиль upSkin или любой другой необходимый скин для каждого itemRenderer (ImageCell) вместо всех их (как было бы tileList.setRendererStyle ());
Я думал, что мог бы легко получить доступ к классу ImageCell (по умолчанию Cell Renderer для TileList), но это не тот случай. Единственный способ получить доступ к методу cellRenderer itemToCellRenderer , но элемент, переданный в качестве аргумента, исходит из ListEvent
Я изменил Пример, приведенный в документации, чтобы проиллюстрировать идею.
В этом коде предполагается, что у вас есть компонент TileList плюс три символа MovieClips со следующими связями в библиотеке: Star, BlueBg, RedBg
импорт fl.controls. ;
import fl.controls.listClasses. ;
импорт fl.data. ;
импорт fl.events. ;
var totalEntries:uint = 20;
var myTileList:TileList = new TileList();
myTileList.columnWidth = 125;
myTileList.rowHeight = 150;
myTileList.columnCount = 3;
myTileList.rowCount = 1;
myTileList.move(10,10);
addChild(myTileList);
for(var i:int=0; i<totalEntries; i++) {
myTileList.addItem( { label:"star"+i, source:Star, scaleContent:false, index:i} );
}
myTileList.addEventListener(ListEvent.ITEM_ROLL_OVER, listItemOver);
function listItemOver(e:ListEvent):void {
var imageCell:ImageCell = myTileList.itemToCellRenderer(e.item) as ImageCell;
//e.index % 2 == 0 ? imageCell.setStyle('upSkin',BlueBg): imageCell.setStyle('upSkin',RedBg);
}
Это было бы грязно, даже если бы это работало. У меня есть проблемы при отправке событий ITEM_ROLL_OVER, плюс я не думаю, что отправка тонны событий при заполнении компонента, просто для некоторых цветов это хорошая идея.
ооочень ... во Flash осталось 2 вещи
- Почти никто не хочет поведения по умолчанию в компонентах Flash. Каждый хочет немного
обычай что-то.
- Я полагаю, что «магия» во Flash заключается в поиске «хакерских» решений.
вот что сработало для меня:
Обратите внимание, что когда я добавляю элемент, я также добавляю и индексирую свойство, чтобы каждый элемент знал, что это за индекс. Затем я позволяю содержимому каждой ячейки решать, какой скин следует отображать (что создает зависимости, поэтому для этого должен быть понятный способ), поэтому я добавил следующий код в Star MovieClip
import fl.controls.listClasses.ImageCell;
var cell:ImageCell = this.parent.parent.parent as ImageCell;
trace(cell.data.index);
if(cell.data.index %2 == 0) cell.setStyle('upSkin',BlueBg);
else cell.setStyle('upSkin',RedBg);
Надеюсь, это поможет.