using System;
using System.Collections.Generic;
public partial class UIManager
{
#region Stack Management - 委托给 UINavigationManager
///
/// 导航栈(只读,用于兼容旧代码)
///
public List UiWindowStack => UINavigationManager.Instance.NavigationStack;
///
/// 检查窗口是否在栈中
///
public bool CheckIsWindowInStack(UIWindow window)
{
return UINavigationManager.Instance.IsWindowInStack(window);
}
///
/// 获取栈顶窗口
///
public UIWindow GetLast()
{
return UINavigationManager.Instance.GetTopWindow();
}
///
/// 获取栈顶的全屏窗口
///
public UIWindow GetLastFullScreen()
{
return UINavigationManager.Instance.GetTopFullScreenWindow();
}
///
/// 入栈(兼容方法,推荐使用 UINavigationManager)
///
[Obsolete("Use UINavigationManager.HandleWindowOpen instead")]
public void PushWindow(UIWindow window)
{
UINavigationManager.Instance.HandleWindowOpen(window, UIStackMode.Stackable);
}
///
/// 出栈
///
public UIWindow PopWindow()
{
return PopWindow(null);
}
///
/// 出栈(带窗口名检查)
///
public UIWindow PopWindow(string checkWindowName)
{
var top = UINavigationManager.Instance.GetTopWindow();
if (top != null && (string.IsNullOrEmpty(checkWindowName) || checkWindowName == top.WindowName))
{
UINavigationManager.Instance.HandleWindowClose(top);
return top;
}
return null;
}
///
/// 强制移除窗口(从栈中移除但不关闭)
///
public void ForceRemoveWindow(UIWindow window)
{
UINavigationManager.Instance.HandleWindowClose(window);
}
///
/// 清空栈(保留指定窗口)
///
public void ClearHideStack(params string[] windowName)
{
var stack = UINavigationManager.Instance.NavigationStack;
// 倒序遍历,避免索引问题
for (int i = stack.Count - 1; i >= 0; i--)
{
var window = stack[i];
// 检查是否是要保留的窗口
bool shouldKeep = false;
for (int j = 0; j < windowName.Length; j++)
{
if (window.WindowName == windowName[j])
{
shouldKeep = true;
break;
}
}
if (!shouldKeep)
{
// 先从栈移除,再关闭窗口
UINavigationManager.Instance.HandleWindowClose(window);
window.CloseWindow(UIWindowCloseType.ForceDestroy);
}
}
}
///
/// 清空所有栈
///
public void ClearHideStack()
{
var stack = UINavigationManager.Instance.NavigationStack;
// 先复制列表,避免在遍历时修改集合
var windowsToClose = new List(stack);
UINavigationManager.Instance.Clear();
// 再关闭所有窗口
for (int i = 0; i < windowsToClose.Count; i++)
{
windowsToClose[i].CloseWindow(UIWindowCloseType.ForceDestroy);
}
}
#endregion
}