PDA

Просмотр полной версии : как текст в TextField внутри SimpleButton?


Agro
06.01.2008, 17:02
В причципе весь вопрос в заголовке. На сцене уже находится кнопка (Button НЕ компонента) и внутри него динамическое текстовое поле (TextField ). Хочу изменить надпись на кнопке, но когда обращаюсь как было принято в AS 2.0, через точку, то получаю ошибку: Error #1069: Property btnLabel not found on flash.display.SimpleButton and there is no default value. Подскажите пожалуйста, как это сделать правильно. Заранее благодарен.

etc
06.01.2008, 17:37
Код показывайте.

vol_demon
26.06.2008, 17:01
У меня подобный вопрос, перечитал все подобные темы на форуме, но так ничего непонял. А вопрос вот в чем, у меня есть кнопка внутри нее динамическое текстовое поле и я не могу (не знаю) как можно к нему обратиться. Если Type кнопки сделаь Movie Clip а не Button то можно спокойно обратиться через ".". Помогите ламеру в AC3, принципиально type должен быть Button. Спасибо

Felicast
26.06.2008, 18:12
у SimpleButton есть свойства upState, overState, downState, hitTestState.
можно обратиться

this.upState.btnLabel.text = "text"

в overState, downState, hitTestState мне удавалось добраться до текстового поля только через getChildAt(), так как почему-то имя к текстовому полю не присваивается

vol_demon
26.06.2008, 21:20
А можно примерчик использования обоих методов, а то с getChildAt() вооще не разобрался, а с this.upState.btnLabel.text = "text" туплю, вроде с классами не все впорядке. Спасибо

silin
26.06.2008, 22:26
Agro, насчет "как было принято в AS 2.0" - мякго говоря, неточность: всегда достучатся до внутренностей кнопки можно было только с шаманским бубном..
в AS3 стало логичнее (см. пост Felicast'а), но немногим удобнее, все равно это задачка для истых мазохистов самураев: внутренние имена кнопки скрыты и добраться до содержимого можно только перебором (ну или угадать),
ищем текстфилд в первом состоянии кнопки:
var butState:Sprite = Sprite(but.upState);
for (var i:int = 0; i < butState.numChildren; i++)
{
var child:DisplayObject = butState.getChildAt(i);
if (child is TextField)
{
var tf:TextField = TextField(child);
trace(tf.text);
break;
}
}
да, резюме:кнопки полезны, если они действительно только кнопки, если на них навешивается еще какой функционал, то все существенно удобнее с помощью мувиков/спрайтов

Felicast
26.06.2008, 23:38
да, резюме:кнопки полезны, если они действительно только кнопки, если на них навешивается еще какой функционал, то все существенно удобнее с помощью мувиков/спрайтов
не уверен что проще. тут ведется аналогичное обсуждение, только про мувиклипы.
как добраться до объекта в определенном фрейме? (http://www.flasher.ru/forum/showthread.php?t=113370)

если есть предложение, как организовать кнопку с текстом, я срадостью послушаю.

Felicast
26.06.2008, 23:44
А можно примерчик использования обоих методов, а то с getChildAt() вооще не разобрался, а с this.upState.btnLabel.text = "text" туплю, вроде с классами не все впорядке. Спасибо

я немного поторопился. это не совсем работоспособный код

я делал это так:
this.txtUp = (this.upState as DisplayObjectContainer).getChildAt(1) as TextField;
this.txtDown = (this.downState as DisplayObjectContainer).getChildAt(1) as TextField;
this.txtOver = (this.overState as DisplayObjectContainer).getChildAt(1) as TextField;
txtUp, txtDown, txtOver - заранее объявленые переменные (TextField)
но это только, если есть уверенность, что getChildAt(1) - это текстовое поле. (у меня в кадре текстовое поле, а под ним Shape)

silin
27.06.2008, 09:41
>>если есть предложение, как организовать кнопку с текстом, я с радостью послушаю.

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

Felicast
27.06.2008, 11:46
Просто использование SimpleButton для этих целей, на первый взгляд, является самам разумным решением