0

诚然,这与之前提出的问题非常相似,但略有不同。在我看来,我所看到的关于如何将选项卡应用于或不应用于 TabNavigator 的所有内容都不够好。问题在于,我在研究中看到的执行此操作的方法存在以下问题:在用户看到标签丢失后瞬间添加标签,或者在用户看到标签出现后瞬间删除标签。有没有办法解决这个问题?谢谢!

编辑:为了清楚起见,我的意思是,对于标签和图像等其他内容,我们基本上可以通过将它们的可见性设置为可绑定变量并且在设置该变量之前不进入它们所在的屏幕来解决这个问题。我正在寻找与这种方法等效的方法。谢谢!

4

1 回答 1

0

当可绑定变量发生变化时,您可以使用 aChangeWatcher来触发函数。在该函数中,根据变量的值添加或删除选项卡。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx"
               creationComplete="onCreationComplete()"
               xmlns:local="*">
    <fx:Script>
        <![CDATA[
            import mx.binding.utils.ChangeWatcher;

            [Bindable]
            public var showTab2:Boolean;

            private var watcher:ChangeWatcher;

            private function onCreationComplete():void
            {
                watcher=ChangeWatcher.watch(this, "showTab2", onValueChange);
            }

            private var _tab2:NavigatorContent;

            public function get tab2():NavigatorContent
            {
                if (!_tab2)
                {
                    _tab2=new NavigatorContent();
                    _tab2.label="tab2";
                }
                return _tab2;
            }

            private function onValueChange(event:Event):void
            {
                if (showTab2 && !tabNav.contains(tab2))
                {
                    tabNav.addElement(_tab2);
                }
                else if (!showTab2 && tabNav.contains(tab2))
                {
                    tabNav.removeChild(tab2);
                }
            }
        ]]>
    </fx:Script>

    <s:layout>
        <s:VerticalLayout/>
    </s:layout>

    <mx:TabNavigator id="tabNav" width="300" height="300">
        <s:NavigatorContent label="tab 1"/>
    </mx:TabNavigator>

    <s:Button label="Add/remove tab2" click="showTab2 = !showTab2"/>
</s:Application>
于 2012-08-21T15:46:05.860 回答