Установить значение динамического текстового поля внутри объекта кнопки - PullRequest
0 голосов
/ 02 ноября 2011

У меня есть динамическое текстовое поле в моем объекте кнопки.Я назвал текстовое поле «myText».Как я могу изменить текст в нем?myButton.myText.text = "test"; не будет работать, потому что не может получить доступ к myText.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2011

Я обычно просто создаю мувиклип, который содержит пустую кнопку и динамическое текстовое поле.Если вы установите mouseEnabled = false в текстовом поле, оно не будет мешать событиям мыши на кнопке.

Редактировать:
Вот и пример пользовательского класса кнопок, который я иногда использую:

package {

import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.text.TextField

public class CustomButton extends MovieClip {

    public var t_label:TextField; 

    public function CustomButton() {
        t_label.mouseEnabled = false;
        mouseChildren = false;
        buttonMode = true;

        this.gotoAndStop("normal");
        addEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
        addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
        addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
    }

    public function setLabel(buttonLabel:String):void {
        t_label.text = buttonLabel;
    }

    public function destroy():void {
        removeEventListener(MouseEvent.MOUSE_OVER, onMouseOver);
        removeEventListener(MouseEvent.MOUSE_OUT, onMouseOut);
        removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
    }

    protected function onMouseOver(e:MouseEvent):void {
        this.gotoAndStop("over");
    }

    protected function onMouseOut(e:MouseEvent):void {
        this.gotoAndStop("normal");
    }

    protected function onMouseDown(e:MouseEvent):void {
        this.gotoAndPlay("down");
    }

}   

}

Вы можете связать это с мувиклипом, у которого есть кадры с метками «нормальный», «над» и «вниз», и он будет функционировать как обычная кнопка с динамической меткой.

Если вам нужно настроить внешний вид текста для различных состояний, вы можете сделать это в обработчиках событий.

0 голосов
/ 02 ноября 2011

Обновленный ответ:

У меня есть два решения для вас, но одно требует, чтобы у вас был только один TextField в кнопке и никаких других объектов.

1

Если у вас есть только один TextField в вашей кнопке, тогда свойство upState вашей кнопки будет TextField, и вы можете напрямую установить его текстовое свойство:

myButton.upState.text = "Click Me";
myButton.downState.text = "Click Me";
myButton.overState.text = "Click Me";

2

Если первая техника не применима к вам, решение будет немного сложнее.

Сначала создайте мувиклип в своей библиотеке, содержащий текущее содержимое фрейма вверх вашей кнопки. Установите его для экспорта и присвойте ему имя класса (TextHolder). Затем вы можете создать объект TextHolder, установить его текстовое свойство textLabel и назначить его каждому состоянию кнопки:

var buttonState:TextHolder = new TextHolder();
buttonState.myText.text = "Click me";
myButton.upState = myButton.downState = myButton.overState = myButton.hitTestState = buttonState;

Если вы хотите создать разные состояния, скажем, с разноцветным текстом, вам придется создавать разные объекты для разных состояний:

var buttonState:TextHolder = new TextHolder();
var buttonStateOver:TextHolder = new TextHolder();
buttonState.myText.text =  buttonStateOver.myText.text = "Hello";
buttonStateOver.x = 10;
myButton.upState = buttonState;
myButton.hitTestState = buttonState;
myButton.downState = myButton.overState = buttonStateOver;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...