2011-10-17 7 views
0

特定のユーザー状態に応じてビューナビゲーターを定義し、一部を選択的に非表示にできるかどうかを判断しようとしていますか?ナビゲーターを表示特定のタブを非表示TabBarなし

たとえば、2つのナビゲータタブがあります.1つはログインタブで、もう1つはユーザーポリシーを示しています。私が研究してきた

<s:ViewNavigator id="signInTab" width="100%" height="100%" firstView="views.SignInView"> 
    <s:navigationContent> 
     <s:Button id="signInTabButton" icon="@Embed('images/lockSmall.png')" click="tabButton_clickHandler(event)" /> 
    </s:navigationContent> 
</s:ViewNavigator> 

すべては全体のタブバーを非表示にするに私を指す:タブの

<s:ViewNavigator id="policyTab" width="100%" height="100%" firstView="views.policy.PoliciesView"> 
    <s:navigationContent> 
     <s:Button id="policyTabButton" label="Policies" click="tabButton_clickHandler(event)" /> 
    </s:navigationContent> 
</s:ViewNavigator> 

ログインナビゲータは、次のとおりです。ユーザーが署名した場合、私は唯一のポリシー]タブが表示されるようにしたいです私はしたくない。私は単純にsignInTab.visible = falseを呼び出そうとしました。しかし動作しません。

ご協力いただければ幸いです。

答えて

1

TabbedViewNavigatorのコンテンツを非表示にすることはできませんが、タブを非表示にするためにコンテンツを調整する別の方法があります。基本的には、TabbedViewNavigatorからタブを削除して再表示して、再度表示することができます。私はあなたが求めていることをするような非常に簡単な例を思いついた。

TabbedViewNavTest.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            applicationDPI="160" 
            preinitialize="preinitializeHandler(event)"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 

      import views.Tab2View; 

      private static var app:TabbedViewNavigatorApplication; 

      public static function adjustTabBar():void { 
       if(app.navigators.length > 1) { 
        removeTab2(); 
       } else { 
        addTab2(); 
       } 
      } 

      private static function removeTab2():void { 
       app.tabbedNavigator.removeItemAt(1); 
      } 

      private static function addTab2():void { 
       var tab2:ViewNavigator = new ViewNavigator(); 
       tab2.label = "Tab2"; 
       tab2.percentWidth = 100; 
       tab2.percentHeight = 100; 
       tab2.firstView = Tab2View; 
       app.tabbedNavigator.addItemAt(tab2, 1); 
      } 

      protected function preinitializeHandler(event:FlexEvent):void { 
       app = this; 
      } 

     ]]> 
    </fx:Script> 

    <s:ViewNavigator id="tab1" label="Tab1" width="100%" height="100%" firstView="views.Tab1View"/> 
    <s:ViewNavigator id="tab2" label="Tab2" width="100%" height="100%" firstView="views.Tab2View"/> 

</s:TabbedViewNavigatorApplication> 

Tab1View.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     title="Tab1"> 

    <fx:Script> 
     <![CDATA[ 
      protected function showHideButton_clickHandler(event:MouseEvent):void { 
       TabbedViewNavTest.adjustTabBar(); 
      } 
     ]]> 
    </fx:Script> 

    <s:Button id="showHideButton" label="Click Me!" click="showHideButton_clickHandler(event)" /> 
</s:View> 

Tab2Viewが、私はプロジェクトを作成したときに作成されたばかりの空の図です。

これは必要な処理を行う必要がありますが、実行しようとしていることを達成するためのより良い方法があるかどうかは疑問です。たとえば、ユーザーがログインしたときに消えるログインタブを最初に提示した場合、アプリケーションはnotLoggedInおよびloggedInの2つの状態を持つ汎用アプリケーションとして作成できました。 notLoggedIn状態では、ログイン画面を表示するビューの表示のみ、またはログインタブとポリシータブを持つtabbedViewNavigatorの表示があります。ログインした状態では、ポリシータブのみを持つ別のtabbedViewNavigatorがあります。ユーザーがログインしているときに他のタブを利用できる可能性があります。私が意味するものの例を作成したい場合は、教えてくださいそれ。

+0

詳細をありがとうございました。これは大きな助けとなりました。 – EmanP

関連する問題