PDA

Просмотр полной версии : Динамическое создание кнопок.


Pushkash
22.12.2009, 15:36
Данные о кнопках подгружаются с сервера. Код:

public function createButtons():void{
var myButton:Button = new Button();
myButton.setStyle('upSkin',ButtonNormal);
myButton.setStyle('overSkin',ButtonNormal);
myButton.setStyle('downSkin',ButtonDown);
var myUISprite:UISprite = new UISprite();
field.rawChildren.addChild(myUISprite); // field - canvas
myUISprite.addOnScreen(myButton);
}

Код класса UISprite:

package ButtonsPanel
{
import flash.display.Sprite;
import mx.controls.Button;
public class UISprite extends Sprite
{
private var sprite:Sprite;
public function UISprite(){

}

public function addOnScreen(s:Button):void{
sprite = s;
addChild(sprite);
trace('added');
}
}
}

Экран остается стерильным.

Saulot
22.12.2009, 17:15
Зачем myButton добавляется в спрайт? Он же наследуется от UIComponent.
Почему бы не так:

public function createButtons():void{
var myButton:Button = new Button();
myButton.setStyle('upSkin',ButtonNormal);
myButton.setStyle('overSkin',ButtonNormal);
myButton.setStyle('downSkin',ButtonDown);
var myHBox:HBox = new HBox();
myHBox.addChild(myButton);
field.addChild(myHBox);
}

Pushkash
23.12.2009, 11:09
Простите, но вы сами то это пробовали компилировать? Результат такой же как и при:
field.rawChildren.addChild(myButton);

Saulot
23.12.2009, 11:30
Пробовал. Результат нормальный, кнопка появляется,
а в чем у вас проблема из этого кода не разберешь.

Дайте полный код файла, попробуем разобраться.

Pushkash
23.12.2009, 13:02
То что у вас все компилится, меня не мало насторожило. Пришлось взять букварь и прочитать таки сообщение об ошибки. Четко и ясно написано "невозможно преобразовать ButtonNormal@720fca1 в mx.core.IFlexDisplayObject."

Решение:

myButton.styleName = 'buttonStyle';
field.addChild(myButton);

...

<mx:Style>
.buttonStyle{
upSkin:Embed(source='Assets/Buttons.swf',symbol='ButtonNormal');
overSkin:Embed(source='Assets/Buttons.swf',symbol='ButtonNormal');
downSkin:Embed(source='Assets/Buttons.swf',symbol='ButtonDown');
}
</mx:Style>


Буду дальше учиться читать :(