¿Quieres registrarte?

Cómo deshabilitar un botón de un ToggleButtonBar en Flex

Por: solisarg
7 de Enero del 2009
6487 de clabLevel
Otros artículos de solisarg
2,072 visitas

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.ButtonBarButton5
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

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas flex componente

Comentarios | Enviar un comentario
El código completo del MXML (para completud) queda:

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
   <![CDATA[
      import mx.controls.Button;
      import mx.events.ItemClickEvent;
      private function init():void{
         Button(barra.getChildAt(0)).enabled = false
         Button(barra.getChildAt(1)).enabled = false
      }
      private function clickHandler(event:ItemClickEvent):void{
        trace("Clickado: "+event.label)
      }
   ]]>
</mx:Script>
<mx:ToggleButtonBar creationComplete="init()" 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>   
</mx:Application>



Jorge
Por: solisarg
Muy bueno Jorge (y)
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: Zguillez
Hey! Seguro es muy útil, buen Tip solisarg.
Por: M@U
util (Y) muy bueno
Por: eldervaz
Gracias de verdad amigo. No tenía este problema en particular, pero saber como acceder a las propiedades de los botones hijos del TBB me salvó la vida.
Por: Wolvington-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.