怎么关闭所有PopUpManager弹出的窗口?
这一个貌似很简单,缺又凭空增加麻烦和工作量的事情.
如果你按照下面这种模式,那么关闭所有弹出窗口又变得那么简单.
需求: 假设当应用程序出现错误.需要将用户弹出窗口全部关闭.恢复到初始状态.
实现思路:
1. 定义单例类. 用来保存所有弹出窗口的数组
2. 将弹出事件封装,由其去创建弹出窗口.和保存到数组对象
两个重要类:
PopUpEffect.as(弹出事件封装类)
package com.javaeye.jhaij
{
import mx.managers.PopUpManager;
public class PopUpEffect
{
public function PopUpEffect()
{
}
public static function show(parent:*,control:*,modal:Boolean=false):void
{
PopUpManager.addPopUp(control,parent,modal);
PopUpManager.centerPopUp(control);
PopupModellocator.getInstance().push(control);
}
public static function hide(control:*):void
{
PopUpManager.removePopUp(control);
PopupModellocator.getInstance().pop(control);
}
}
}
PopupModellocator.as (保存数组对象的单例类,关闭全部调用)
package com.javaeye.jhaij
{
import com.adobe.utils.ArrayUtil;
[Bindable]
public class PopupModellocator
{
private static var instance:PopupModellocator;
//保存pop出来的窗口
private var popupArray:Array ;
public function DataGridModellocator()
{
if(instance==null){
instance = this;
}
}
public static function getInstance():PopupModellocator{
if(instance==null){
instance = new PopupModellocator();
}
return instance;
}
public function push(control:*):void{
if(!popupArray){
popupArray = new Array;
}
popupArray.push(control);
}
public function pop(control:*):void{
if(popupArray){
ArrayUtil.removeValueFromArray(popupArray,control);
}
}
public function popAll():void{
if(popupArray&&popupArray.length>0){
PopUpEffect.hide(popupArray[popupArray.length-1]);
popAll();
}else{
return;
}
}
}
}
使用方法:
a. 弹出窗口创建入口: PopUpEffect.show
var p:PopWindow = new PopWindow;
PopUpEffect.show(this,p);
p.setFocus();
b. 弹出窗口单个关闭调用: PopUpEffect.hide
close="PopUpEffect.hide(this);"
c. 弹出窗口全部关闭调用: popAll - 注意是PopupModellocator的方法
PopupModellocator.getInstance().popAll();
依赖类库:
as3corelib.swc
工程编译是用sdk3.5编译的. 你可以修改成4 因为都是as文件.完全向上兼容.