2012-04-26 93 views
0

Hallo tabbar支持项目点击事件。然而,spark tabBar不支持itemClick事件。火花tabbar中的itemclick事件?

有没有办法听itemClick事件在SPARK的TabBar

感谢所有

+0

没有。使用[IndexChangeEvent](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/events/IndexChangeEvent.html) – RIAstar 2012-04-26 14:54:44

+0

Spark Tabar不支持indexChangeEvent – flex 2012-04-26 15:54:54

+0

是的它确实:在'change'中MXML表示法实际上是一个'IndexChangeEvent.CHANGE'。 – RIAstar 2012-04-26 17:40:23

回答

1

Spark组件从ListBase继承不再派遣项目单击事件。不过,您也可以使用IndexChangeEvent事件。它有一个属性newIndex,告诉你哪个是新选择的项目(或在这个特定情况下的选项卡)。与老项目单击

<s:TabBar dataProvider="{dp}" change="trace('selected: ' + event.newIndex)" /> 

一个大区别是,当所选择的项目实际上改变了这一事件,才调度(而不是每次被点击)。如果您确实需要返回ItemClick的行为,则可以创建一个自定义的ItemRenderer,用于分派ItemClick事件 。


如果你想对每次点击做出反应,有几种方法。这里有两个:

1.创建一个调度ItemClick事件的自定义ItemRenderer。

public class TabBarButton extends ButtonBarButton { 

    override public function initialize():void { 
     super.initialize(); 
     addEventListener(MouseEvent.CLICK, fireItemClick); 
    } 

    private function fireItemClick(event:MouseEvent):void { 
     owner.dispatchEvent(new ItemClickEvent(
      ItemClickEvent.ITEM_CLICK, false, false, null, itemIndex, null, data 
     )) 
    } 

} 

您现在可以使用这样的:

<s:TabBar id="tabBar" dataProvider="{dp}" 
      itemRenderer="net.riastar.TabBarButton" /> 

tabBar.addEventListener(ItemClickEvent.ITEM_CLICK, onItemClick); 

2 /另一种方法是只用于侦听的TabBar任何click事件,并使用event.target找到点击标签:

<s:TabBar dataProvider="{dp}" click="trace(event.target)" /> 
//traces tabBar.TabBarSkin1.dataGroup.TabBarButton1 

请注意,这是一个直接回答你的问题,但我其实不认为你应该这样做。在大多数情况下,IndexChangeEvent.CHANGE会很好。

+0

谢谢,我正在尝试调度事件,无论用户何时单击tabbar。更改事件不会支持这种行为。您能否详细介绍一下itemrender如何帮助添加itemclik事件 – flex 2012-04-26 15:08:05