Example #1
0
    /// <summary>
    ///  面板返回
    /// </summary>
    /// <param name="pid"></param>
    public void OnPanelCacheBack(PanelID pid = PanelID.None)
    {
        if (pid != PanelID.None && pid != CurShowCachePanel)
        {
            if (IsShowPanel(CurShowCachePanel))
            {
                HidePanel(CurShowCachePanel, false, null);
            }

            ShowMain();

            UIFrameManager.Instance.CheckCloseRightBtn();
            Engine.Utility.Log.Error("OnPanelCacheBack return {0},{1}", pid, CurShowCachePanel);
            return;
        }

        if (CurShowCachePanel != PanelID.None)
        {
            //内部跳转直接成功直接return
            UIPanelBase panelBase = GetPanel(CurShowCachePanel);
            if (null != panelBase && panelBase.ExecuteReturnLogic())
            {
                return;
            }
        }
        if (IsShowPanel(PanelID.TopBarPanel))
        {
            HidePanel(PanelID.TopBarPanel, false);
        }
        if (IsShowPanel(PanelID.CommonBgPanel))
        {
            HidePanel(PanelID.CommonBgPanel, false);
        }

        if (panelCacheStack.Count == 0)
        {
            if (IsShowPanel(CurShowCachePanel))
            {
                HidePanel(CurShowCachePanel, false, null);
            }

            ShowMain();

            UIFrameManager.Instance.CheckCloseRightBtn();

            return;
        }
        bool success = false;


        UIPanelBase.PanelReturnData panelReturnData = panelCacheStack.Peek();
        if (null != panelReturnData)
        {
            if (panelReturnData.PID == CurShowCachePanel)
            {
                panelCacheStack.Pop();
                success = true;
                Action returenAction = () =>
                {
                    CurShowCachePanel = PanelID.None;
                    if (null != panelReturnData.CachePanelList && panelReturnData.CachePanelList.Count > 0)
                    {
                        UIPanelBase.PanelData pd = null;
                        for (int i = 0; i < panelReturnData.CachePanelList.Count; i++)
                        {
                            pd = panelReturnData.CachePanelList[i];
                            if (null == pd)
                            {
                                continue;
                            }

                            ShowPanel(pd.PID, pd.PrePanelData, true, data: pd.Data, jumpData: pd.JumpData);
                        }
                    }
                };
                if (IsShowPanel(CurShowCachePanel))
                {
                    HidePanel(CurShowCachePanel, false, returenAction);
                }
                else
                {
                    returenAction.Invoke();
                }
            }
            else
            {
                Engine.Utility.Log.Error("PanelCacheBackError {0},{1}", panelReturnData.PID, CurShowCachePanel);
            }
        }

        if (!success)
        {
            ShowMain();
        }

        UIFrameManager.Instance.CheckCloseRightBtn();
    }