|  | @@ -27,7 +27,7 @@ namespace GFGGame
 | 
	
		
			
				|  |  |          private static GComponent _alertLayer;
 | 
	
		
			
				|  |  |          private static GComponent _debugLayer;
 | 
	
		
			
				|  |  |          private static GComponent _floatLayer;
 | 
	
		
			
				|  |  | -        private static bool _nowHideOthers = false;
 | 
	
		
			
				|  |  | +        private static bool _nowHideOthers = false;     //正在关闭所有界面的循环中
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          private static Dictionary<string, List<object[]>> _goBackDatas = new Dictionary<string, List<object[]>>();
 | 
	
		
			
				|  |  |         
 | 
	
	
		
			
				|  | @@ -170,17 +170,36 @@ namespace GFGGame
 | 
	
		
			
				|  |  |                  viewStructure.viewData = viewData;
 | 
	
		
			
				|  |  |                  viewStructure.iUIView = obj;
 | 
	
		
			
				|  |  |                  _viewStack.Add(viewStructure);
 | 
	
		
			
				|  |  | -                if (_viewStack.Count > 1 && !hideOthers)
 | 
	
		
			
				|  |  | +                if (_viewStack.Count > 1 && !hideOthers) {
 | 
	
		
			
				|  |  |                      _viewStack[_viewStack.Count - 2].iUIView.Hide();
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              return true;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        //删除队列中的倒数几个
 | 
	
		
			
				|  |  | -        public static void DeleteViewStackCountDown(int count)
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  | +        /// <summary>
 | 
	
		
			
				|  |  | +        /// 界面可返回栈里的跳转
 | 
	
		
			
				|  |  | +        /// </summary>
 | 
	
		
			
				|  |  | +        /// <param name="viewName">跳转到界面缓存栈里的某个界面,使用这个参数时写在打开下一个界面后</param>
 | 
	
		
			
				|  |  | +        /// <param name="count">删除队列中的倒数几个,较灵活应对更多种情况,可自由控制</param>
 | 
	
		
			
				|  |  | +        public static void DeleteViewStackCountDown(string viewName, int count = 0)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | +            if (viewName != null && viewName != "")
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                for (int i = _viewStack.Count - 2; i > 0; i--)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    ViewStructure viewStructure = _viewStack[i];
 | 
	
		
			
				|  |  | +                    if (viewStructure.name == viewName)
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                    _viewStack.RemoveAt(i);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |              for (int i = 0; i < count; i++) {
 | 
	
		
			
				|  |  | +                if (_viewStack.Count <= 1)
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  |                  _viewStack.RemoveAt(_viewStack.Count-1);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -212,9 +231,13 @@ namespace GFGGame
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          public static void HideWin(string viewName)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  | -            if (_viewStack.Count > 1 && !_nowHideOthers) {
 | 
	
		
			
				|  |  | -                ViewStructure viewStructure = _viewStack[_viewStack.Count - 1];
 | 
	
		
			
				|  |  | +            if (_nowHideOthers)
 | 
	
		
			
				|  |  | +                return;
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            if (_viewStack.Count >= 1)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  |                  bool hasShowingView = false;
 | 
	
		
			
				|  |  | +                bool needShowNextView = false;
 | 
	
		
			
				|  |  |                  foreach (var info in _viewDic.Keys)
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  |                      IUIView objIsShowing = _viewDic[info];
 | 
	
	
		
			
				|  | @@ -224,26 +247,35 @@ namespace GFGGame
 | 
	
		
			
				|  |  |                          break;
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -                if (!hasShowingView || (viewStructure.iUIView.isReturnView && viewStructure.name == viewName))
 | 
	
		
			
				|  |  | +                ViewStructure viewStructure = _viewStack[_viewStack.Count - 1];
 | 
	
		
			
				|  |  | +                if (_viewStack.Count == 1)
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  | -                    //关闭自己,在队列里去除
 | 
	
		
			
				|  |  | -                    if(viewStructure.iUIView.isReturnView && viewStructure.name == viewName)
 | 
	
		
			
				|  |  | -                        _viewStack.RemoveAt(_viewStack.Count - 1);
 | 
	
		
			
				|  |  | +                    //没有界面显示了,栈被清除剩1个的时候,做保底
 | 
	
		
			
				|  |  | +                    if (!hasShowingView)
 | 
	
		
			
				|  |  | +                        needShowNextView = true;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                else { 
 | 
	
		
			
				|  |  | +                    if (!hasShowingView || (viewStructure.iUIView.isReturnView && viewStructure.name == viewName))
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        //关闭自己,在队列里去除
 | 
	
		
			
				|  |  | +                        if (viewStructure.iUIView.isReturnView && viewStructure.name == viewName)
 | 
	
		
			
				|  |  | +                            _viewStack.RemoveAt(_viewStack.Count - 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        if (_viewStack.Count >= 1)
 | 
	
		
			
				|  |  | +                            needShowNextView = true;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    if (_viewStack.Count >= 1)
 | 
	
		
			
				|  |  | +                if (needShowNextView) { 
 | 
	
		
			
				|  |  | +                    viewStructure = _viewStack[_viewStack.Count - 1];
 | 
	
		
			
				|  |  | +                    ViewManager.Show($"GFGGame.{viewStructure.name}", viewStructure.viewData);
 | 
	
		
			
				|  |  | +                    foreach (var objName in _viewDic.Keys)
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  | -                        viewStructure = _viewStack[_viewStack.Count - 1];
 | 
	
		
			
				|  |  | -                        ViewManager.Show($"GFGGame.{viewStructure.name}", viewStructure.viewData);
 | 
	
		
			
				|  |  | -                        foreach (var objName in _viewDic.Keys)
 | 
	
		
			
				|  |  | +                        if (objName != viewStructure.name)
 | 
	
		
			
				|  |  |                          {
 | 
	
		
			
				|  |  | -                            if (objName != viewStructure.name)
 | 
	
		
			
				|  |  | -                            {
 | 
	
		
			
				|  |  | -                                IUIView view = (IUIView)_viewDic[objName];
 | 
	
		
			
				|  |  | -                                if (view.isShowing)
 | 
	
		
			
				|  |  | -                                {
 | 
	
		
			
				|  |  | -                                    view.Show();
 | 
	
		
			
				|  |  | -                                }
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | +                            IUIView view = (IUIView)_viewDic[objName];
 | 
	
		
			
				|  |  | +                            if (view.isShowing)
 | 
	
		
			
				|  |  | +                                view.Show();
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 |