/// <summary> /// 打开一个弹窗界面 /// </summary> /// <param name="popupOperate"></param> /// <param name="belongPageView">当前弹窗属于哪个Page 管理 ,如果=null则表示属于当前打开的界面 否则指定的参数界面 </param> /// <param name="isFailRecord">如果是因为优先级而无法弹出 则表示是否需要记录 如果为false 则当无法显示时候不会自动弹出,而是隐藏了</param> /// <param name="parameter"></param> /// public void OpenPopUp(PopupOpenOperateEnum popupOperate, UIBasePageView belongPageView, bool isFailRecord, UIParameterArgs parameter) { if (parameter == null) { Debug.LogError("parameter 不要使用null 使用默认的 UIParameterArgs.Create() 无参数方法替代"); return; } #if UNITY_EDITOR if (this.WindowType != WindowTypeEnum.PopUp) { Debug.LogError("OpenPopUp Fail,Not Popup Window " + this.name); return; } #endif Dictionary <int, UIBasePopupView> allWillHidePopupView = GetWillHidePopupView(this, popupOperate, isFailRecord, parameter); foreach (var item in allWillHidePopupView) { item.Value.HideWindow(UIParameterArgs.Create()); m_AllRecordViewPopup.RemoveAt(item.Key); } if (belongPageView == null) { belongPageView = UIBasePageView.CurOpenPage; } UIParameterArgs args0 = UIParameterArgs.Create(belongPageView, isFailRecord); this.ShowWindow(Helper.Instance.MegerUIParameter(args0, parameter)); //注意这里的第一个参数 m_AllRecordViewPopup.Add(this); }
/// <summary> /// 打开一个弹窗时候根据需求 获取需要关闭的弹窗 /// </summary> /// <param name="view"></param> /// <param name="popupOperate"></param> private Dictionary <int, UIBasePopupView> GetWillHidePopupView(UIBasePopupView popupView, PopupOpenOperateEnum popupOperate, bool isFailRecord, UIParameterArgs parameter) { Dictionary <int, UIBasePopupView> allWillHidePopupView = new Dictionary <int, UIBasePopupView>(); if (m_AllRecordViewPopup.Count == 0) { return(allWillHidePopupView); } switch (popupOperate) { case PopupOpenOperateEnum.KeepPreviousAvailable: break; case PopupOpenOperateEnum.HideAllOpenView: for (int dex = 0; dex < m_AllRecordViewPopup.Count; ++dex) { allWillHidePopupView.Add(dex, m_AllRecordViewPopup[dex]); } break; case PopupOpenOperateEnum.HideCurPagePopupView: for (int dex = 0; dex < m_AllRecordViewPopup.Count; ++dex) { if (m_AllRecordViewPopup[dex].BelongPageView == popupView.BelongPageView) { allWillHidePopupView.Add(dex, m_AllRecordViewPopup[dex]); } } //获取当前弹窗所属的页面 break; case PopupOpenOperateEnum.PriorityOrder: if (m_AllRecordViewPopup[m_AllRecordViewPopup.Count - 1].Priority >= popupView.Priority) { if (isFailRecord) { RecordWillPopupView(popupView.BelongPageView, popupView); popupView.FailShowByPriority(parameter); //记录参数 } else { popupView.HideWindow(UIParameterArgs.Create()); } } //加入到待弹出界面中 else { allWillHidePopupView.Add(m_AllRecordViewPopup.Count - 1, m_AllRecordViewPopup[m_AllRecordViewPopup.Count - 1]); } break; default: Debug.LogError("没有处理的枚举类型 " + popupOperate); break; } return(allWillHidePopupView); }
/// <summary> /// 打开一个弹窗界面 (属于当前页面的) /// </summary> /// <param name="popupOperate"></param> /// <param name="isFailRecord">如果是因为优先级而无法弹出 则表示是否需要记录 如果为false 则当无法显示时候不会自动弹出,而是隐藏了</param> public void OpenPopUp(PopupOpenOperateEnum popupOperate, bool isFailRecord = true) { OpenPopUp(popupOperate, UIBasePageView.CurOpenPage, isFailRecord, UIParameterArgs.Create()); }
/// <summary> /// 打开一个弹窗界面 (属于当前页面的) /// </summary> /// <param name="popupOperate"></param> /// <param name="isFailRecord">如果是因为优先级而无法弹出 则表示是否需要记录 如果为false 则当无法显示时候不会自动弹出,而是隐藏了</param> /// <param name="parameter"></param> /// public void OpenPopUp(PopupOpenOperateEnum popupOperate, bool isFailRecord, UIParameterArgs parameter) { OpenPopUp(popupOperate, UIBasePageView.CurOpenPage, isFailRecord, parameter); }