How to close all popup windows in Flex?

后端 未结 2 559
清酒与你
清酒与你 2021-01-23 23:45

I want to show all popup windows(already popped up and closed individually) on an image by pressing a button press and want to close all those windows on another button press. A

相关标签:
2条回答
  • 2021-01-24 00:25

    Try this:

    package com.devahead.utils
    {
        import flash.display.DisplayObject;
    
        import mx.collections.ArrayCollection;
        import mx.core.Application;
        //import mx.core.FlexGlobals; // NOTE: use this import for Flex 4.x and higher
        import mx.core.IChildList;
        import mx.core.UIComponent;
        import mx.managers.PopUpManager;
    
        public class PopUpUtils
        {
            /**
             * Returns all the popups inside an application. Only the popups whose base
             * class is UIComponent are returned.
             *
             * @param applicationInstance
             *   Application instance. If null, Application.application is used.
             * @param onlyVisible
             *   If true, considers only the visible popups.
             * @return All the popups in the specified application.
             */
            public static function getAllPopups(applicationInstance: Object = null,
                onlyVisible: Boolean = false): ArrayCollection
            {
                var result: ArrayCollection = new ArrayCollection();
    
                if (applicationInstance == null)
                {
                    // NOTE: use this line for Flex 4.x and higher
                    //applicationInstance = FlexGlobals.topLevelApplication;
    
                    // NOTE: use this line for Flex 3.x and lower
                    applicationInstance = Application.application;
                }
    
                var rawChildren: IChildList = applicationInstance.systemManager.rawChildren;
    
                for (var i: int = 0; i < rawChildren.numChildren; i++)
                {
                    var currRawChild: DisplayObject = rawChildren.getChildAt(i);
    
                    if ((currRawChild is UIComponent) && UIComponent(currRawChild).isPopUp)
                    {
                        if (!onlyVisible || UIComponent(currRawChild).visible)
                        {
                            result.addItem(currRawChild);
                        }
                    }
                }
    
                return result;
            }
    
            /**
             * Checks if an application has visible popups. Only the popups whose base
             * class is UIComponent are considered.
             *
             * @param applicationInstance
             *   Application instance. If null, Application.application is used.
             * @return True if there are visible popups in the specified application,
             *         false otherwise.
             */
            public static function hasVisiblePopups(applicationInstance: Object = null): Boolean
            {
                if (applicationInstance == null)
                {
                    // NOTE: use this line for Flex 4.x and higher
                    //applicationInstance = FlexGlobals.topLevelApplication;
    
                    // NOTE: use this line for Flex 3.x and lower
                    applicationInstance = Application.application;
                }
    
                var rawChildren: IChildList = applicationInstance.systemManager.rawChildren;
    
                for (var i: int = 0; i < rawChildren.numChildren; i++)
                {
                    var currRawChild: DisplayObject = rawChildren.getChildAt(i);
    
                    if ((currRawChild is UIComponent) && UIComponent(currRawChild).isPopUp
                        && UIComponent(currRawChild).visible)
                    {
                        return true;
                    }
                }
    
                return false;
            }
    
            /**
             * Closes all the popups belonging to an application. Only the popups
             * whose base class is UIComponent are considered.
             *
             * @param applicationInstance
             *   Application instance. If null, Application.application is used.
             * @return The list of the closed popups.
             */
            public static function closeAllPopups(applicationInstance: Object = null): ArrayCollection
            {
                var allPopups: ArrayCollection = getAllPopups(applicationInstance);
    
                for each (var currPopup: UIComponent in allPopups)
                {
                    PopUpManager.removePopUp(currPopup);
                }
    
                return allPopups;
            }
        }
    }
    

    I got it from the following: http://www.devahead.com/blog/2009/12/getting-all-the-popups-in-a-flex-application/

    0 讨论(0)
  • 2021-01-24 00:32

    Try this:

    for (var i:int = systemManager.popUpChildren.numChildren - 1; i >= 0; i--)
    {
        var popup:IFlexDisplayObject = IFlexDisplayObject(systemManager.popUpChildren.getChildAt(i));
        PopUpManager.removePopUp(popup);
    }
    
    0 讨论(0)
提交回复
热议问题