使用PopupManager可以添加/創建/刪除新的彈出框。但是我無法找到一種方法來獲得最頂級的彈出窗口,而無需重寫此類(這是您想爲大型Flex應用程序執行的操作)。Flex:找到最上面的彈出框
到目前爲止,我發現這個解決方案,這是更多的解決方案。所以如果任何機構有更好的解決方案,我會非常高興地閱讀它。
假設你調用帶有參數PopUpManagerChildList.POPUP
,例如addPopup/createPopup:
PopUpManager.createPopUp(parent,MyPopupClass,true,PopUpManagerChildList.POPUP);
的這個函數將返回最頂部的彈出:
private function getTopMostPopup():void
{
var childList:IChildList = Application.application.systemManager.popUpChildren;
for (var i:int = childList.numChildren - 1; i > 0; i--)
{
var child:DisplayObject = childList.getChildAt(i);
if (child is Container)
return child;
}
return null;
}
Application.application.systemManager.popUpChildren
包含了所有的DisplayObject與PopupManager一起顯示。但是,儘管屏幕中不可見,但組件中的許多itemRenderer可能在此列表中。這就是爲什麼我的函數得到從容器繼承的最後一個孩子(您的彈出窗口必須從容器繼承)。
Yah沒有在PopUpManager上編寫擴展(老實說不應該做太多工作,只需要重寫addPopUp和createPopUp就可以跟蹤最後創建的那個,會更高效但可能忽略不計的時間,除非你有1000年的彈出窗口,在這種情況下,你有UI問題:)我認爲這似乎有點合理,如果因爲任何原因你覺得延長PopUpManager會有問題。 – shaunhusain 2011-03-30 19:01:45