using System.Collections.Generic; /// /// UI导航栈管理器 /// 负责管理窗口的入栈、出栈和返回历史 /// public class UINavigationManager { #region Singleton private static UINavigationManager _instance; public static UINavigationManager Instance { get { if (_instance == null) { _instance = new UINavigationManager(); } return _instance; } } private UINavigationManager() { } #endregion #region Fields /// /// 导航栈:存储窗口的返回历史 /// private List _navigationStack = new List(8); /// /// 对外只读访问(用于兼容旧代码) /// public List NavigationStack => _navigationStack; /// /// 栈中窗口数量 /// public int Count => _navigationStack.Count; #endregion #region Stack Operations /// /// 处理窗口入栈(根据配置) /// /// 窗口实例 /// 栈管理模式 public void HandleWindowOpen(UIWindow window, UIStackMode stackMode) { if (window == null) return; switch (stackMode) { case UIStackMode.None: // 不入栈(如Tips、HUD) break; case UIStackMode.Stackable: // 普通入栈 if (!_navigationStack.Contains(window)) { _navigationStack.Add(window); } break; case UIStackMode.Replace: // 替换栈顶 if (_navigationStack.Count > 0) { var top = _navigationStack[_navigationStack.Count - 1]; _navigationStack.RemoveAt(_navigationStack.Count - 1); } _navigationStack.Add(window); break; case UIStackMode.ClearAndPush: // 清空后入栈 _navigationStack.Clear(); _navigationStack.Add(window); break; } } /// /// 处理窗口关闭(出栈) /// /// 窗口实例 public void HandleWindowClose(UIWindow window) { if (window != null && _navigationStack.Contains(window)) { _navigationStack.Remove(window); } } /// /// 获取栈顶窗口 /// public UIWindow GetTopWindow() { return _navigationStack.Count > 0 ? _navigationStack[_navigationStack.Count - 1] : null; } /// /// 检查窗口是否在栈中 /// public bool IsWindowInStack(UIWindow window) { return _navigationStack.Contains(window); } /// /// 清空栈 /// public void Clear() { _navigationStack.Clear(); } #endregion }