Un problema que nos encontramos al crear una aplicación en Flex es que el componente ToogleButtonBar no tiene un método para deshabilitar los botones.
¿Cómo podemos solucionar esto? Fácil, accedemos a la instancia del botón interna dentro del displaylist y la deshabilitamos:
Código :
Button(barra.getChildAt(0)).enabled = false
Esto es debido a que el componente ToggleButtonBar de Flex tiene una particularidad: no expone los botones en los métodos de su clase y recibe simplemente strings para crearlos. Se le puede dar estilo a los botones, pero hay un problema si por algún motivo queremos deshabilitarlos ... no tenemos un método para hacerlo. He aquí un simple script de botones:
Código :
<mx:ToggleButtonBar itemClick="clickHandler(event)" id="barra" x="54" y="26"> <mx:String>Video</mx:String> <mx:String>Documents</mx:String> <mx:String>Board</mx:String> </mx:ToggleButtonBar>
Si bien el contenido son strings, al crearse el componente se crean botones. No podemos especificar un click directamente en el MXML, pero en la función clickHandler podemos distinguir las etiquetas y hacer algo en función de ellas, muestro aquí como ver la etiqueta:
Código :
private function clickHandler(event:ItemClickEvent):void{ trace("Clickado: "+event.label) }
Pero bajo determinadas condiciones, puede que necesitemos deshablitar algún botón ... pero leyendo la documentación no encontramos métodos para hacerlo. La primera sospecha es que los botones se encuentran en el displayList de la barra ... para comprobarlo usamos un for ... in para trazar los hijos (podemos llamar la función en el creationComplete del ToogleButtonBar)
Código :
private function init():void{ for(var i:Number = 0; i<barra.numChildren; i++) trace(barra.getChildAt(i)) }
La salida es algo así:
salida :
toogleButtonExample0.barra.ButtonBarButton7
toogleButtonExample0.barra.ButtonBarButton9
Bingo, tenemos nuestros botones allí. Luego intentamos deshabilitar por ejemplo los dos primeros cambiando la función init:
Código :
private function init():void{ Button(barra.getChildAt(0)).enabled = false Button(barra.getChildAt(1)).enabled = false }
El cast a Button es para que el compilador no marque error al poner el enabled. Aquí el resultado:
Una solución simple para un problema relativamente común.
Jorge
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por solisarg el 07 de Enero de 2009
Código :
Jorge
Por Zguillez el 10 de Enero de 2009
Nunca me encontré en el caso de necesitar dehabilitar un botón en un ToogleButtonBar, pero seguro el tip me servirá en su momento
Por M@U el 11 de Enero de 2009
Por eldervaz el 12 de Enero de 2009
Por Wolvington el 14 de Agosto de 2009
Por solisarg el 25 de Septiembre de 2018