2012-04-26 97 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