切换视图 [Flash Builder 4.5 - Flex Mobile]

3

我正在尝试构建一个应用程序,其中包含登录视图(无选项卡),用户提交“登录”后,它将切换到另一个主视图(带选项卡)。这可能吗?

目前,我选择了“Tabbed Application”作为应用程序模板。
为了隐藏选项卡栏,我尝试了以下方法:

protected function view1_activateHandler(event:Event):void
        {
            // TODO Auto-generated method stub
            this.tabBarVisible = false;
        }

..但是在运行应用程序时,隐藏具有下滑动画(这意味着它不会立即隐藏)
此外,如果切换到主视图,则登录选项卡(属于LoginView)按钮将显示在选项卡栏上,而我不希望如此。

还有其他方法吗? 我对Flash Builder / Flex 4.5非常陌生... 帮帮我

我需要10个声望点才能发布图片 =。= 抱歉,我想发布截图以获得更好的理解。 还差4个声望点):

1个回答

5

在登录前,您应该将视图元素中的tabBarVisible属性设置为false,并在登录后更改如下:

<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    tabBarVisible="false"
    title="My View" />

当您想要显示视图时,只需通过将 this.tabBarVisible 设置为 true 来显示工具栏。

public function loginHandler():void {
    // Do login activities
    this.tabBarVisible = true;
}

以下是我在评论中提到的内容...
Main.mxml:
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
          xmlns:s="library://ns.adobe.com/flex/spark"
          xmlns:components="components.*"
          creationComplete="creationCompleteHandler(event)">
<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        private static var app:Main;

        public static function login():void {
            app.loginComponent.visible = false;
            app.navigator.visible = true;
        }

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

    ]]>
</fx:Script>

<components:LoginComponent id="loginComponent" left="0" right="0" top="0" bottom="0" />


<s:TabbedViewNavigator id="navigator" left="0" right="0" top="0" bottom="0" visible="false">
    <s:ViewNavigator id="testView1" width="100%" height="100%" label="Test 1" firstView="views.TestView1" />
    <s:ViewNavigator id="testView2" width="100%" height="100%" label="Test 2" firstView="views.TestView2" />
</s:TabbedViewNavigator>

我在这里做的是创建一个默认应用程序,其中包含一个简单的登录组件,如下所示...

LoginComponent.mxml:

<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script>
    <![CDATA[
        protected function login(event:MouseEvent=null):void {
            Main.login();
        }
    ]]>
</fx:Script>

<s:VGroup left="0" right="0" top="0" bottom="0" horizontalAlign="center" horizontalCenter="0"
          verticalAlign="middle" verticalCenter="0">
    <s:HGroup left="0" right="0" height="75" horizontalAlign="left" verticalAlign="middle">
        <s:Label text="User Name"/>
        <s:Spacer width="10" height="10"/>
        <s:TextInput id="usernameInput" width="200"/>
    </s:HGroup>
    <s:HGroup left="0" right="0" height="75" verticalAlign="middle">
        <s:Label text="Password"/>
        <s:Spacer width="18" height="10"/>
        <s:TextInput id="passwordInput" width="200" displayAsPassword="true" enter="login()"/>
    </s:HGroup>
    <s:HGroup left="0" right="0" height="75" verticalAlign="middle" horizontalAlign="center" gap="20">
        <s:Button label="Login" click="login(event)" id="btnLogin"/>        
    </s:HGroup>
</s:VGroup>

这使我能够拥有一个登录屏幕,我刚刚在一个组件中创建了它,并将其嵌入到主应用程序中作为启动屏幕,可以随意显示/隐藏 TabbedViewNavigator。我还没有尝试从一个应用程序启动到下一个应用程序启动,以查看状态如何维护(即,如果您想要一个持久的登录,您可能可以在创建完成处理程序中进行一些验证,但这取决于您的选择。


第一部分有效感谢Chad!但是因为我添加了一个选项卡视图“登录”,所以属于它的选项卡按钮出现在主视图的选项卡栏上(成功登录后)。我似乎找不到删除它的方法。这是因为所有内容都包含在<TabbedViewNavigatorApplication>下吗?不同状态是否有用?虽然我尝试过玩弄它:P - daney
哦,不要添加一个名为“login”的TabView。这是你可以尝试的。我会创建一个基本应用程序,而不是一个选项卡式的应用程序,并手动创建一个选项卡式视图导航器部分。然后,您可以构建一个登录组件并将其放在屏幕上方。然后,您可以显示/隐藏组件并显示/隐藏选项卡式视图导航器,并在成功登录后启动第一个视图。我会在我的答案中添加一些额外的代码来演示。 - Chad
谢谢Chad!我试了一下你的建议,感觉很有趣。将来的项目中会用到它作为参考!易于理解(:顺便问一下,是否可以实现从登录到主视图的过渡?因为目前视图切换似乎很突兀。我尝试在切换到主视图之前添加一个繁忙指示器,哈哈!(老实说,我是一个Flex新手)还是应该发另一个新问题?哈哈!谢谢! - daney
我会发布一个关于这个问题的新问题。你可能可以进行过渡,但是由于我还没有到整理和在我的应用程序中完成这些小的视觉方面的阶段,所以我还没有去管这个问题。 - Chad
我刚想到一个关于转换的问题:你可能可以在你的主应用程序中有多个状态,其中一个包含登录表单,另一个包含选项卡视图导航器(或非选项卡应用程序的视图导航器),并将转换放在状态之间的切换上。然后,你只需要切换状态而不是在组件上切换可见标志。 - Chad
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接