0

我有以下代码来创建一个ViewStack用作TabBar的数据提供者:

    <s:TabBar id="objectTab" dataProvider="{vs_objects}"/>
       <mx:ViewStack id="vs_objects" width="100%" />

我想限制ViewStack的子项数量,以避免当用户打开许多选项卡而不关闭任何选项卡时选项卡会离开屏幕。当用户打开一个新选项卡并且ViewStack的大小大于 9时,我尝试通过删除ViewStack中最旧的元素来做到这一点。

private function openTab(object:Object): void {
  //Create a new NavigatorContent(form) and add it to the ViewStack
  ........
  vs_objects.addChild(form);
  if(vs_objects.numChildren > 9) {
    vs_objects.removeChildAt(0);     
  }
  //vs_objects.selectedChild = form;
  vs_objects.selectedIndex = (vs_Tiltaksbanken.numChildren -1);
}

下图说明了我的问题,其中深灰色说明了选定的Tab。当我在选择新的之前不删除子时,应该只有一个选定的选项卡,它与上述两种子选择方法都可以正常工作。当我删除一个孩子然后打开一个新选项卡时,新选项卡没有被正确选择,它只会以选定的颜色“绘制”。在这种情况下,当我打开选项卡41(超过 9 个选项卡)时,仍然显示选项卡40。此问题的结果是Tab 41 未完全呈现。

在此处输入图像描述

有谁知道我该如何解决这个问题,或者有不同的方法来限制Tab的/ ViewStack -children 的数量?

更新: 问题是我在儿童NavigatorContent中的 AS3 代码导致应用程序以这种方式运行。解决方案是使用callLater方法:

我的问题的解决方案是使用如下所示的callLater方法和Adnan Doric的代码示例:

 protected function openTab():void
 {
    var form:Container = new Container();
    form.name = "Tab " + counter++;
    vs_objects.addChild(form);
    vs_objects.selectedChild = form;
    callLater(removeTab);
 }
 private function removeTab(): void {
    if (vs_objects.numElements > 10)
      vs_objects.removeElementAt(0);
 }
4

1 回答 1

1

试试这个,即使我不确定它是正确的解决方案,也许最好实现某种滚动。

<?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" minWidth="955" minHeight="600">

    <fx:Script>
        <![CDATA[
            import mx.core.Container;

            private var counter:int = 1;

            protected function openTab():void
            {
                var form:Container = new Container();
                form.name = "Tab " + counter++;
                vs_objects.addChild(form);
                if (vs_objects.numElements > 10)
                    vs_objects.removeElementAt(0);
                vs_objects.selectedChild = form;
            }

        ]]>
    </fx:Script>

    <s:TabBar id="objectTab" top="32" labelField="name" dataProvider="{vs_objects}"/>
    <mx:ViewStack id="vs_objects" width="100%" />
    <s:Button label="addTab" click="openTab()" />
</s:Application>

希望有帮助:)

于 2012-03-07T12:35:51.320 回答