2010-12-23 2 views
0

J'ai un conteneur viewstack avec 3 vues: rouge, noir et bleu. Comment puis-je complètement cacher le noir & ne pas l'inclure?Masquer le conteneur d'un conteneur viewstack

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"  
      xmlns:mx="library://ns.adobe.com/flex/mx"  
      xmlns:s="library://ns.adobe.com/flex/spark" 
      horizontalCenter="0" verticalCenter="0" 
      > 

<mx:LinkBar dataProvider="{myVS}" borderVisible="false" color="blue" disabledColor="black" /> 

<mx:ViewStack id="myVS" borderVisible="false" width="100%" height="100%" > 

    <mx:VBox id="red" label="click red" horizontalAlign="center" verticalAlign="middle" > 
     <s:Label id="r1" color="red" fontSize="25" text="This is the red label" /> 
    </mx:VBox> 

    <mx:VBox id="black" label="click black" horizontalAlign="center" verticalAlign="middle" > 
     <s:Label id="r2" color="black" fontSize="25" text="This is the black label" /> 
    </mx:VBox> 

    <mx:VBox id="blue" label="click blue" horizontalAlign="center" verticalAlign="middle" > 
     <s:Label id="r3" color="blue" fontSize="25" text="This is the blue label" /> 
    </mx:VBox> 

</mx:ViewStack> 

</s:Application> 

Répondre

1

Je crains de ne pas avoir compris l'intention de votre question. Un composant ViewStack est utilisé pour afficher plusieurs vues "empilées" les unes sur les autres, seule la vue étant affichée à la fois. Il ne comprend pas de navigation intégrée comme un TabNavigator pourrait. Si vous voulez "cacher complètement" la vue noire, mettez-la simplement en commentaire avant de compiler le code et par conséquent elle ne sera jamais montrée.

Je vois dans votre exemple de code que vous utilisez une barre de liens avec ViewStack en tant que dataProvider, alors peut-être que vous vouliez demander comment garder la vue en noir sur le linkBar. Il suffit de faire un peu de magie ActionScript pour créer un fournisseur de données personnalisé:

var dataProvider : ArrayCollection = new ArrayCollection([ 
{label:"click Red"}, 
{label:"click blue"} 
]); 

et préciser que dataprovider comme source dataProvider pour votre LinkBar:

<mx:LinkBar dataProvider="{dataProvider}" borderVisible="false" color="blue" disabledColor="black" /> 
0

Je pense que le rapide et le plus sale façon est de simplement supprimer:

myVS.removeElement(black); 

Mais, je pense que j'utiliserais états d'affichage à la place. Cela vous permet de le récupérer plus tard sans savoir comment et où le remettre. Définissez vos états:

<s:states> 
    <s:State name="all" /> 
    <s:State name="notBlack" /> 
</s:states> 

Et dans votre « noir » VBox, exclure de l'état « notBlack »:

<mx:VBox id="black" excludeFrom="notBlack" ... /> 

Ensuite, lorsque vous voulez supprimer, vous pouvez le faire en réglant currentState

<s:Button click="currentState='notBlack'" label="remove black" /> 
+0

Utilisation des états et ViewStacks ensemble? C'est sauvage. Je ne vois pas pourquoi cela ne fonctionnerait pas, mais ils sont parfois utilisés comme deux approches différentes aux mêmes fins. – JeffryHouser

+0

Ha! Je ne sais pas ... Je ne les vois certainement pas comme mutuellement exclusives ... :) ViewStack est tout au sujet de changer des vues en gros ... les états de vue sont un peu plus arrosés partout. Bien que, j'ai mis à jour ma réponse pour montrer que vous pouvez simplement enlever la chose ... rapide et sale ... 'myVs.removeElement (noir)'. Juste pour montrer qu'il y a des tonnes de manières de résoudre ce problème :) –

+0

Je n'ai pas pensé à le faire avec états mais je pense que la réponse de Flextra fonctionnera mieux pour moi. THX –

Questions connexes