TabNavigator 什么事件才是Tab的点击事件?

时间:2021-09-16 20:10:23
我想给TabNavigator上的每一个tab都加上一个click事件..不管它是否处于激活状态只要鼠标点击都能调用该事件.
change只能调用未激活的..而mouseDown会把Tab下面的Canvas也给加上..我该用什么事件才能够调用呢?

7 个解决方案

#1


楼主没深入理解TabNavigator

这个容器是将选项卡和视图作为一个整体关联,而你现在的需求实质上已经在分离选项卡和视图了,所以用它解决不了的,当然你重写组件另当别论~~~

有个跟它类似的组件TabBar,显示效果差不多!但它分离了选项卡和视图(可以分别控制)!

试着用下应该就能满足你的需求~~~~

#2


还是附上一个官方例子给你

<?xml version="1.0"?>
<!-- Simple example to demonstrate the TabBar control. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[

            import mx.events.ItemClickEvent;
            import mx.controls.TabBar;

            [Bindable]
            public var STATE_ARRAY:Array = [{label:"Alabama", data:"Montgomery"},
                {label:"Alaska", data:"Juneau"},
                {label:"Arkansas", data:"LittleRock"}
            ];
            
            private function clickEvt(event:ItemClickEvent):void {
                // Access target TabBar control.
                var targetComp:TabBar = TabBar(event.currentTarget);
                forClick.text="label is: " + event.label + ", index is: " + 
                    event.index + ", capital is: " +
                    targetComp.dataProvider[event.index].data;
            }                
       ]]>
    </mx:Script>

    <mx:Panel title="TabBar Control Example" height="75%" width="75%" 
        paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10">

        <mx:Label width="100%" color="blue" 
            text="Select a tab to change the current panel."/>

        <mx:TabBar itemClick="clickEvt(event);">
            <mx:dataProvider>{STATE_ARRAY}</mx:dataProvider>
        </mx:TabBar>

        <mx:TextArea id="forClick" height="100%" width="100%"/>

    </mx:Panel>
</mx:Application>

在itemClick事件里控制即可~~~

#3


不知道楼主,想干什么?

#4


你的意思,是没有激活的TAB页就不能调用页中的控件

你可以将TabNavigator控件的属性设置一下就好了  creationPolicy="all"

这样默认情况下全部tab页都激活,你也可以在运行时调用了

#5


3L的太复杂了···LZ看一下TabNavigator的源码就知道它有TabBar控件,只是它有两个方法取得一个是protected的只能在它的子类里使用所以要用的话得继承TabNavigator重写然后加事件,还有个是mx_internal function getTabBar():TabBar看到它的nameSpace是mx_internal这样就可以根据nameSpace取得了 具体代码

var item:TabBar = tab.mx_internal::getTabBar();//tab为TabNavigator的实例名或ID
item.addEventListener(ItemClickEvent.ITEM_CLICK,clickHandler);

#6


LZ可以添加一Click 事件 再通过判断 TabNavigtor。selectedIndex 添加监听分发事件

#7


引用 5 楼 niwenbin416 的回复:
3L的太复杂了···LZ看一下TabNavigator的源码就知道它有TabBar控件,只是它有两个方法取得一个是protected的只能在它的子类里使用所以要用的话得继承TabNavigator重写然后加事件,还有个是mx_internal function getTabBar():TabBar看到它的nameSpace是mx_internal这样就可以根据nameSpace取得了 具体代码
……

非常感谢..就是这样的 谢谢...

#1


楼主没深入理解TabNavigator

这个容器是将选项卡和视图作为一个整体关联,而你现在的需求实质上已经在分离选项卡和视图了,所以用它解决不了的,当然你重写组件另当别论~~~

有个跟它类似的组件TabBar,显示效果差不多!但它分离了选项卡和视图(可以分别控制)!

试着用下应该就能满足你的需求~~~~

#2


还是附上一个官方例子给你

<?xml version="1.0"?>
<!-- Simple example to demonstrate the TabBar control. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[

            import mx.events.ItemClickEvent;
            import mx.controls.TabBar;

            [Bindable]
            public var STATE_ARRAY:Array = [{label:"Alabama", data:"Montgomery"},
                {label:"Alaska", data:"Juneau"},
                {label:"Arkansas", data:"LittleRock"}
            ];
            
            private function clickEvt(event:ItemClickEvent):void {
                // Access target TabBar control.
                var targetComp:TabBar = TabBar(event.currentTarget);
                forClick.text="label is: " + event.label + ", index is: " + 
                    event.index + ", capital is: " +
                    targetComp.dataProvider[event.index].data;
            }                
       ]]>
    </mx:Script>

    <mx:Panel title="TabBar Control Example" height="75%" width="75%" 
        paddingTop="10" paddingBottom="10" paddingLeft="10" paddingRight="10">

        <mx:Label width="100%" color="blue" 
            text="Select a tab to change the current panel."/>

        <mx:TabBar itemClick="clickEvt(event);">
            <mx:dataProvider>{STATE_ARRAY}</mx:dataProvider>
        </mx:TabBar>

        <mx:TextArea id="forClick" height="100%" width="100%"/>

    </mx:Panel>
</mx:Application>

在itemClick事件里控制即可~~~

#3


不知道楼主,想干什么?

#4


你的意思,是没有激活的TAB页就不能调用页中的控件

你可以将TabNavigator控件的属性设置一下就好了  creationPolicy="all"

这样默认情况下全部tab页都激活,你也可以在运行时调用了

#5


3L的太复杂了···LZ看一下TabNavigator的源码就知道它有TabBar控件,只是它有两个方法取得一个是protected的只能在它的子类里使用所以要用的话得继承TabNavigator重写然后加事件,还有个是mx_internal function getTabBar():TabBar看到它的nameSpace是mx_internal这样就可以根据nameSpace取得了 具体代码

var item:TabBar = tab.mx_internal::getTabBar();//tab为TabNavigator的实例名或ID
item.addEventListener(ItemClickEvent.ITEM_CLICK,clickHandler);

#6


LZ可以添加一Click 事件 再通过判断 TabNavigtor。selectedIndex 添加监听分发事件

#7


引用 5 楼 niwenbin416 的回复:
3L的太复杂了···LZ看一下TabNavigator的源码就知道它有TabBar控件,只是它有两个方法取得一个是protected的只能在它的子类里使用所以要用的话得继承TabNavigator重写然后加事件,还有个是mx_internal function getTabBar():TabBar看到它的nameSpace是mx_internal这样就可以根据nameSpace取得了 具体代码
……

非常感谢..就是这样的 谢谢...