View Navigator Скрыть определенную вкладку, а не TabBar - PullRequest
0 голосов
/ 17 октября 2011

Я пытаюсь выяснить, возможно ли определить навигаторы вида и выборочно скрыть некоторые из них в зависимости от конкретного пользовательского состояния?

Например, у меня есть две вкладки навигатора, одна из которых является вкладкой для входа, а другая отображает политику пользователей. Я хочу, чтобы вкладка политики была видимой, если пользователь выполнил вход в систему:

<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>

Вкладка для входа - навигатор:

<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>  

Все, что я исследовал, указывает на то, что я скрываю всю панель вкладок, чего я не хочу делать. Я попытался просто позвонить signInTab.visible = false; но это не работает.

Любая помощь будет оценена.

1 Ответ

1 голос
/ 18 октября 2011

Это правда, что вы не можете скрыть содержимое 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. В состоянии notLoggedIn у вас есть только представление представления, которое представляет экран входа в систему, или представление tabbedViewNavigator, которое имеет вкладки входа в систему и политики. В состоянии входа в систему у вас есть отдельная tabbedViewNavigator, которая имеет только вкладку политики или, возможно, другие вкладки, доступные при входе пользователя. Если вы хотите, чтобы я создал пример того, что я имею в виду, дайте мне знать, и я могу сделать что.

...