根据之前窗体的四个基本生命周期
在静态方法中检测窗体是否加载与是否展示
若加载,则调用窗体的进入和刷新
若没有加载的话则调用窗体初始化以及进入和刷新
当然还有关闭窗体
关键点
1.每次打开窗体检测allpages是否已经打开过
2.需要展示的窗体都加入shownpages,压入堆栈
3.关闭窗体则需扫描shownpages,有则关闭,无则忽略
详细代码:
public static void ShowPage<T>() where T : AppBasePages, new()
{string name = typeof(T).Name;
if (AllPages.IsNonNullOrEmpty() && AllPages.ContainsKey(name))
{
ShowPage(name, AllPages[name], null, null);
}
else
{
T t = new T();
ShowPage(name, t, null, null);
}
}
public static void ShowPage(string name, AppBasePages pages, object content, Action callback = null)
{
if (AllPages.IsNull()) { AllPages = new Dictionary<string, AppBasePages>(); }
AppBasePages page = null;
if (!AllPages.ContainsKey(name))
{
AllPages.Add(name, pages);
}
page = AllPages[name];
page.Show();
}
public static void ClosePage(string name, AppBasePages pages, Action callback = null)
{
if (ShownPages.IsNonNullOrEmpty() && pages.IsNonNull() && pages.CacheGameObject.IsNonNull())
{
if (ShownPages.ContainsKey(pages.CacheGameObject.name))
{
ShownPages[pages.CacheGameObject.name].Close();
ShownPages.Remove(pages.CacheGameObject.name);
}
}
}
public static void ClosePage<T>()
{
string name = typeof(T).Name;
if (AllPages.ContainsKey(name))
{
ClosePage(name, AllPages[name], null);
}
}
public static int UIDeep { get; set; }
public static Dictionary<string, AppBasePages> AllPages { get; set; }
public static Dictionary<string, AppBasePages> ShownPages { get; set; }