2012-02-03 90 views
1

一個選項卡我有一個火花的TabBar,我想隱藏和從外部用戶輸入(即一個複選框選中)隱藏在Spark的TabBar

我無法改變標籤的能見度顯示它的一些元素。他們目前總是顯示。

有沒有人有任何想法?我在mx TabBar上看到了一個getTabAt,但該選項卡的外觀很重要,並且要求它看起來像一個選項卡欄而不是按鈕欄。

我對選項卡和用於隱藏和顯示代碼如下:

<fx:Script> 
    <![CDATA[ 
    import mx.containers.VBox; 
    import mx.controls.Label; 

    private function onCreationComplete():void { 
     var vbox1:VBox = new VBox(); 
     vbox1.label = "Tab 1"; 
     var lbl1:Label = new Label() 
     lbl1.text = "Panel1"; 
     vbox1.addChild(lbl1); 
     dp.addChild(vbox1); 

     var vbox2:VBox = new VBox(); 
     vbox2.label = "Tab 2"; 
     var lbl2:Label = new Label() 
     lbl2.text = "Panel 2"; 
     vbox2.addChild(lbl2); 
     dp.addChild(vbox2); 
    } 

    private function showTab(event:MouseEvent):void { 
     makeVisible(true); 
    } 

    private function hideTab(event:MouseEvent):void { 
     makeVisible(false); 
    } 

    private function makeVisible(vis:Boolean):void { 
     VBox(dp.getChildAt(0)).visible = vis; 
     VBox(dp.getChildAt(0)).enabled = vis; 
     VBox(dp.getChildAt(0)).includeInLayout = vis; 
    } 
    ]]> 
</fx:Script> 
<s:VGroup> 
    <s:TabBar id="tabNavigator" width="100%" height="100%" dataProvider="{dp}"/> 
    <mx:ViewStack width="100%" height="100%" id="dp" borderStyle="solid"/> 

    <s:Button click="showTab(event)" label="show Tab"/> 
    <s:Button click="hideTab(event)" label="hide Tab"/> 
</s:VGroup> 

任何建議大大接收

由於

+0

我相信這已經回答了前 http://stackoverflow.com/questions/830977/whats-the-best-way-to-hide-a-tab-in-a-tabnavigator – keyle 2012-02-05 22:26:27

+0

這是MX儘管沒有火花。我可能會考慮將spark標籤轉換爲mx。理想情況下,雖然我想用火花 – RNJ 2012-02-09 14:42:58

+0

來做到這一點,請發佈mxml源碼以及 – keyle 2012-02-10 03:09:13

回答

1

該功能將隱藏在特定索引的突片。如果你沒有includeInLayout,那麼選項卡會消失並留下一個洞。

private function setTabEnabled(index:int, enabled:Boolean):void { 
    var theTab:UIComponent = tabNavigator.dataGroup.getElementAt(index) as UIComponent; 
    if (theTab) 
     theTab.visible = enabled; 
     theTab.includeInLayout = enabled; 
    } 
} 
3

是的,這是真的令人討厭的不記錄這樣一個瑣碎的任務。我來這篇文章,但我在Flex builder 4.6和針對移動應用程序(靈活移動)。有TabbedViewNavigatorApplication,其TabbedViewNavigator作爲其子。 adobe論壇和幫助只顯示如何隱藏整個tabBar,這真的很明顯,但不是如何在tabBar中隱藏不同的選項。

我訪問過的一些地方建議當你想要隱藏它們時從TabbedViewNavigator中移除項目,然後再將它們放回到removeItemAt,addItemAt組合......但你真的不想這樣做。

第一個原因是,從tabBar中刪除項目,您將刪除ViewNavigators,這些ViewNavigators形成特定部分的視圖堆棧。

隨着移除其中一個導航器,你正在搞這個堆棧,如果你的應用程序往往是複雜的一面,或者往往會出現這種方式,你會發現自己有麻煩編寫管理所有這些移除的代碼並添加進程,請記住,TabbedViewNavigator中的導航器Vector中的索引不會混淆。此外,如果您執行一些緩存或自定義句柄導航器屬性,將它們恢復到它們在您將它們從標籤堆棧中移除的那一刻所處的狀態,將會給您帶來很多頭痛的問題。

在從原崗位的解決方案,並與小實驗的解決方案很簡單:

// let say that the instance of Tabbed view navigator look like this: 
    // appRef is reference to TabbedViewNavigatorApplication (if you are in the main mxml, just put "this" as reference) 
    .... 

    var myTabbedViewNavigator : TabbedViewNavigator = appRef.tabbedNavigator; 
    var index : int = 0; // we take item at index 0 for example (1st option in tabBar) 
    var dg : DataGroup = myTabbedViewNavigator.tabBar.dataGroup; 
    dg.getElementAt(index).visible = false; 
    dg.getElementAt(index).includeInLayout = false; 

    .... 

要顯示又把真正的標籤,就是這樣,你的導航儀仍然會在那裏你TabbedViewNavigator內但它們在tabBar中的視覺表現將是不可見的。