2012-03-07 7 views
0

の制約:私は<em>のTabBar</em>のためのデータプロバイダとして使用されている<em>のViewStack</em>を作成するために、次のコード持っているのViewStackの問題で子供の数

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

を、私は子供の数を制限したいですViewStackユーザーがタブを何も閉じずに開いたときにタブが画面外に出ないようにする。ユーザーが新しいタブとのサイズを開いたとき、私はのViewStackで最も古い要素を削除することによってこれを行うにしようとするのViewStack 9.

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); 
} 

の上にある場合、以下の画像は、私の問題を示しています暗い灰色の色は、タブを示しています。選択したタブは1つだけ選択してください。新しい選択を選択する前に子を削除しないと、上の両方の子選択方法で完全に正常に動作します。子を削除して新しいのタブを開くと、新しいタブが正しく選択されず、選択した色でのみ「塗装された」状態になります。この場合 40は、タブ 41(9タブを超える)を開いたときに表示されます。この問題の結果、タブ 41は完全にレンダリングされません。

enter image description here

誰もが、私はこの問題を解決する方法を知っている、またはタブさん/ のViewStack -childrenの数を制約するために異なるアプローチを持っていますか?

UPDATE: 問題は、アプリケーションがこのように動作させた子供NavigatorContent年代内部の私のAS3コードでした。

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); 
} 

答えて

1

はこれを試してみてください:アドナン・ドーリア式のコード例を以下に示すように私の問題へのがcallLater方法を使用していた

ソリューション:ソリューションはcallLater方法を使用していました私はそれが正しい解決策であるかどうかわからなくても、何らかのスクロールを実装するほうが良いかもしれません。

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

希望あなたの答えのために:)

+0

おかげで役立ちますが、このソリューションは私のintial removeChildAtアプローチと同じ問題を引き起こしているようです。しかし、あなたの答えは、コーヒーのカップと一緒に私の下のソリューションにつながる。 +1 – Sebastian

+0

私の例では2つの「色付き」タブはありませんが、問題を解決した場合は、助けてくれてうれしいです:) –

+0

Adnan Doric:それが私の答えを見つけるのに役立ちました。明らかにあなたの事例があなたのために働いたので、それは別のものでなければなりませんでした。この問題は、エラーを引き起こした私の子NavigatorContent内のAS3コードのどこかにありました。この問題は、callLaterメソッドで修正されました。 – Sebastian

関連する問題