一晒喷、案例說明
本篇承接上篇為基礎(chǔ),針對(duì)UI開發(fā)一個(gè)以PureMVC為框架思想的“增刪改查”APP界面應(yīng)用纽帖。
二氧映、框架視圖
三、關(guān)鍵代碼
GameStart
/***
*
* Title: "App應(yīng)用" 項(xiàng)目
* 主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目
*
* 啟動(dòng)PureMVC框架
*
* Description:
* 功能:
*
* Date: 2021.4.9
* Version: 0.1版本
* Modify Recoder:
*
*
*/
using System.Collections;
using System.Collections.Generic;
using SUIFW;
using UnityEngine;
namespace AppByPureMVC
{
public class GameStart:MonoBehaviour
{
//public UserList userListObj;
public UserEmployeeInfo UseEmpInfo;
void Start()
{
Log.Write(GetType()+"/Start()");
//啟動(dòng)框架
ApplicationFacade appFacade = ApplicationFacade.Instance as ApplicationFacade;
//啟動(dòng)項(xiàng)目
if (appFacade != null && UseEmpInfo != null)
{
appFacade.SendNotification(ProConsts.Com_InitMediator, UseEmpInfo);
}
}
}
}
ApplicationFacade
/***
*
* Title: "App應(yīng)用" 項(xiàng)目
* 主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目
*
* PureMvc 框架入口程序
*
* Description:
* 功能:
*
* Date: 2021.4.9
* Version: 0.1版本
* Modify Recoder:
*
*
*/
using System.Collections;
using System.Collections.Generic;
using PureMVC.Interfaces;
using PureMVC.Patterns;
using SUIFW;
using UnityEngine;
namespace AppByPureMVC
{
public class ApplicationFacade:Facade {
protected ApplicationFacade()
{
//空
Log.Write(GetType() + "/構(gòu)造");
}
/// <summary>
/// PureMVC 得到實(shí)例引用
///
/// 得到“單例”且“線程安全”的引用
/// </summary>
public new static IFacade Instance
{
get
{
if (m_instance==null)
{
lock (m_staticSyncRoot)
{
if (m_instance==null)
{
m_instance=new ApplicationFacade();
}
}
}
return m_instance;
}
}
/// <summary>
/// 注冊模型層實(shí)例
/// </summary>
protected override void InitializeModel()
{
base.InitializeModel();
RegisterProxy(new UserProxy());
}
/// <summary>
/// 注冊視圖層實(shí)例
/// </summary>
protected override void InitializeView()
{
base.InitializeView();
RegisterMediator(new UserListMediator());
RegisterMediator(new UserFormMediator());
}
/// <summary>
/// 注冊控制層實(shí)例
/// </summary>
protected override void InitializeController()
{
base.InitializeController();
RegisterCommand(ProConsts.Com_InitMediator,typeof(StartupApplication));
}
}
}
ProConsts
/***
*
* Title: "App應(yīng)用" 項(xiàng)目
* 主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目
*
* 定義項(xiàng)目中所有的“常量”
*
* Description:
* 功能:
*
* Date: 2021.4.9
* Version: 0.1版本
* Modify Recoder:
*
*
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace AppByPureMVC
{
public class ProConsts {
/* PureMVC 命令消息 */
public const string Com_InitMediator="Com_InitMediator";
/* PureMVC 通知消息 */
public const string Msg_InitUserListMediator = "Msg_InitUserListMediator";
public const string Msg_InitUserFormMediator = "Msg_InitUserFormMediator";
//增加用戶信息
public const string Msg_AddNewUserInfo = "Msg_AddNewUserInfo";
//清除用戶信息
public const string Msg_ClearUserInfo = "Msg_ClearUserInfo";
//發(fā)送用戶列表Mediator消息_增加用戶記錄
public const string Msg_AddNewUserInfoToUserListMed = "Msg_AddNewUserInfoToUserListMed";
//發(fā)送用戶列表Mediator消息_更新用戶記錄
public const string Msg_UpdateUserInfoToUserListMed = "Msg_UpdateUserInfoToUserListMed";
//發(fā)送到列表信息Mediator 關(guān)于用戶選擇信息
public const string Msg_SelectUserInfoByCtrlToUserListMediator = "Msg_SelectUserInfoByCtrlToUserListMediator";
//發(fā)送到“用戶窗體”Mediator類狈邑。
public const string Msg_SelUserInfoByUserListMedToUserFormMed = "Msg_SelUserInfoByUserListMedToUserFormMed";
}
}
UserEmployeeInfo
/***
*
* Title: "App應(yīng)用" 項(xiàng)目
* 主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目
*
* 幫助腳本
*
* Description:
* 功能:
*
* Date: 2021.4.9
* Version: 0.1版本
* Modify Recoder:
*
*
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace AppByPureMVC
{
public class UserEmployeeInfo:MonoBehaviour
{
public UserList UserListobj;
public UserForm UserFormobj;
}
}
邏輯控制層 Control
StartupApplication
/***
*
* Title: "App應(yīng)用" 項(xiàng)目
* 主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目
*
* 控制層: 初始化用戶列表Mediator
*
* Description:
* 功能:
*
* Date: 2021.4.9
* Version: 0.1版本
* Modify Recoder:
*
*
*/
using System.Collections;
using System.Collections.Generic;
using PureMVC.Interfaces;
using PureMVC.Patterns;
using SUIFW;
using UnityEngine;
namespace AppByPureMVC
{
public class StartupApplication:SimpleCommand
{
//private UserList userListObj = null;
private UserEmployeeInfo userEmpInfo = null;
public override void Execute(INotification notification)
{
Log.Write(GetType() + "/Execute");
userEmpInfo = notification.Body as UserEmployeeInfo;
if (userEmpInfo != null)
{
//初始化用戶列表操作類
SendNotification(ProConsts.Msg_InitUserListMediator, userEmpInfo.UserListobj);
//初始化用戶窗體操作類
SendNotification(ProConsts.Msg_InitUserFormMediator, userEmpInfo.UserFormobj);
}
}
}
}
數(shù)據(jù)模型層 Mode
UserProxy
/***
*
* Title: "App應(yīng)用" 項(xiàng)目
* 主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目
* 模型層:代理類
* Description:
* 功能: 針對(duì)數(shù)據(jù)實(shí)體類,進(jìn)行各種操作护锤。
*
* Date: 2021.4.9
* Version: 0.1版本
* Modify Recoder:
*
*
*/
using System.Collections;
using System.Collections.Generic;
using PureMVC.Patterns;
using SUIFW;
using UnityEngine;
using UnityEngine.AI;
namespace AppByPureMVC
{
public class UserProxy:Proxy {
//類名稱
public new const string NAME = "UserProxy";
//只讀屬性
public IList<UserVO> Users
{
get { return base.Data as IList<UserVO>; }
}
//構(gòu)造函數(shù)
public UserProxy():base(NAME,new List<UserVO>())
{
Log.Write(GetType() + "/構(gòu)造");
AddUserItem(new UserVO("陸","毅",true,"技術(shù)研發(fā)部","01012345678","luli@yahoo.cn"));
AddUserItem(new UserVO("楊", "冪", false, "銷售市場部", "13166668888", "yangmi@yahoo.cn"));
AddUserItem(new UserVO("angle", "baby", false, "市場部", "01012345678", "luli@yahoo.cn"));
AddUserItem(new UserVO("吳", "一凡", true, "技術(shù)研發(fā)部", "01012345678", "luli@yahoo.cn"));
AddUserItem(new UserVO("沙", "寶亮", true, "技術(shù)研發(fā)部", "01012345678", "luli@yahoo.cn"));
Log.Write(GetType() + "/Users.count="+Users.Count);
}
//增加用戶數(shù)據(jù)
public void AddUserItem(UserVO user)
{
if (user!=null)
{
Users.Add(user);
}
}
//更新數(shù)據(jù)
public void UpdateUserItems(UserVO user)
{
for (int i = 0; i < Users.Count; i++)
{
if (Users[i].Equals(user))
{
//更新
Users[i] = user;
break;
}
}
}
//刪除數(shù)據(jù)
public void DeleteUserItems(UserVO user)
{
for (int i = 0; i < Users.Count; i++)
{
if (Users[i].Equals(user))
{
Users.RemoveAt(i);
break;
}
}
}
}
}
UserVO
/***
*
* Title: "App應(yīng)用" 項(xiàng)目
* 主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目
*
* 模型層: 數(shù)據(jù)實(shí)體類
*
* Description:
* 功能:
*
* Date: 2021.4.9
* Version: 0.1版本
* Modify Recoder:
*
*
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace AppByPureMVC
{
public class UserVO {
//字段
private string _FistName; //姓
private string _LastName; //名字
private bool _Gender; //性別
private string _Department; //部門
private string _Telephone; //聯(lián)系方式
private string _Email; //郵箱
//屬性
public string UserName
{
get { return _FistName + _LastName; }
}
public string FirstName
{
set { _FistName = value; }
get { return _FistName ; }
}
public string LastName
{
set { _LastName = value; }
get { return _LastName; }
}
public bool Gender
{
set { _Gender = value; }
get { return _Gender; }
}
public string Department
{
set { _Department = value; }
get { return _Department; }
}
public string Telephone
{
set { _Telephone = value; }
get { return _Telephone; }
}
public string Email
{
set { _Email = value; }
get { return _Email; }
}
//只讀屬性: 有效性
public bool IsValid
{
get
{
return !string.IsNullOrEmpty(UserName) && !string.IsNullOrEmpty(Department);
}
}
public UserVO()
{
//空
}
public UserVO(string fname,string lname,bool gender,string dep,string tel,string email)
{
if (!string.IsNullOrEmpty(fname)) _FistName = fname;
if (!string.IsNullOrEmpty(lname)) _LastName = lname;
_Gender = gender;
if (!string.IsNullOrEmpty(dep)) _Department = dep;
if (!string.IsNullOrEmpty(tel)) _Telephone = tel;
if (!string.IsNullOrEmpty(email)) _Email = email;
}
//對(duì)象比較
public override bool Equals(object other)
{
bool boolResult = false; //返回結(jié)果
UserVO otherVO = null;
otherVO = other as UserVO;
if (otherVO!=null)
{
if (this.UserName==otherVO.UserName)
{
boolResult = true;
}
}
return boolResult;
}
}
}
視圖交互層 View
UserListMediator
/***
*
* Title: "App應(yīng)用" 項(xiàng)目
* 主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目
*
* 視圖層:用戶列表信息操作類
*
* Description:
* 功能:
*
* Date: 2021.4.9
* Version: 0.1版本
* Modify Recoder:
*
*
*/
using System.Collections;
using System.Collections.Generic;
using PureMVC.Interfaces;
using SUIFW;
using UnityEngine;
using PureMVC.Patterns;
namespace AppByPureMVC
{
public class UserListMediator : Mediator
{
//字段
public new const string NAME = "UserListMediator"; //本類名稱
private UserProxy _UserProxy; //模型層官地,用戶信息代理類
//(只讀)屬性
private UserList _UserListProp
{
get
{
return base.ViewComponent as UserList;
}
}
//當(dāng)前用戶選擇的記錄
private UserVO _CurrentSelectUserRecord = null;
public UserListMediator():base(NAME)
{
Log.Write(GetType() + "/構(gòu)造");
//構(gòu)造方法為空酿傍。
}
/// <summary>
/// 初始化用戶列表Mediator
/// </summary>
/// <param name="userList">用戶列表腳本</param>
internal void InitUserListMediator(UserList userListObj)
{
if (userListObj != null)
{
Log.Write(GetType() + "/InitUserListMediator()");
base.m_mediatorName = NAME;
base.m_viewComponent = userListObj;
//委托注冊
userListObj.NewUser += HandleNewUser;
userListObj.DeleteUser += HandleDeleteUser;
}
//加載且顯示初始視圖內(nèi)容
Log.Write(GetType() + "/InitUserListMediator()/_UserProxy.Users.count="+_UserProxy.Users.Count);
userListObj.LoadAndShowUserListInfo(_UserProxy.Users);
}
/// <summary>
/// 本類實(shí)例在注冊時(shí)候觸發(fā)
/// </summary>
public override void OnRegister()
{
base.OnRegister();
//得到“用戶代理”引用
_UserProxy = Facade.RetrieveProxy(UserProxy.NAME) as UserProxy;
}
/// <summary>
/// 所有關(guān)注的“消息”
/// </summary>
/// <returns></returns>
public override IList<string> ListNotificationInterests()
{
IList<string> list = new List<string>();
//初始化本類實(shí)例
list.Add(ProConsts.Msg_InitUserListMediator);
//本類(下級(jí))控制腳本發(fā)來的選擇信息
list.Add(ProConsts.Msg_SelectUserInfoByCtrlToUserListMediator);
//從UserFormMediate 發(fā)來信息:增加新用戶
list.Add(ProConsts.Msg_AddNewUserInfoToUserListMed);
//從UserFormMediate 發(fā)來信息:更新用戶信息
list.Add(ProConsts.Msg_UpdateUserInfoToUserListMed);
return list;
}
/// <summary>
/// 處理所有關(guān)注的“消息”
/// </summary>
/// <param name="notification"></param>
public override void HandleNotification(INotification notification)
{
switch (notification.Name)
{
//調(diào)用初始化方法
case ProConsts.Msg_InitUserListMediator:
UserList userListObj = notification.Body as UserList;
InitUserListMediator(userListObj);
break;
//處理用戶選擇的用戶記錄
case ProConsts.Msg_SelectUserInfoByCtrlToUserListMediator:
UserVO userVo = notification.Body as UserVO;
HandelSelctUserInfo(userVo);
break;
//從UserFormMediate 發(fā)來信息:增加新用戶
case ProConsts.Msg_AddNewUserInfoToUserListMed:
UserVO userVoObj = notification.Body as UserVO;
SubmitNewUser(userVoObj);
break;
//從UserFormMediate 發(fā)來信息:更新用戶信息
case ProConsts.Msg_UpdateUserInfoToUserListMed:
UserVO userVoObj2 = notification.Body as UserVO;
SubmitUpdateUserInfo(userVoObj2);
break;
default:
break;
}
}
#region 私有方法
//處理“選擇用戶操作”
private void HandelSelctUserInfo(UserVO userVO)
{
if (userVO!=null)
{
//保存當(dāng)前用戶選擇的記錄烙懦。
_CurrentSelectUserRecord = userVO;
//顯示窗體“刪除”按鈕
_UserListProp.ShowDeleteButton();
//發(fā)送消息,發(fā)送“用戶窗體”類赤炒。
SendNotification(ProConsts.Msg_SelUserInfoByUserListMedToUserFormMed, userVO);
}
}
//處理“新用戶”操作
private void HandleNewUser()
{
//發(fā)送消息氯析,給“用戶(窗體)表單”視圖。
SendNotification(ProConsts.Msg_ClearUserInfo);
}
//處理“刪除用戶”操作
private void HandleDeleteUser()
{
if (_UserProxy!=null && _CurrentSelectUserRecord!=null)
{
//代理層莺褒,調(diào)用刪除方法
_UserProxy.DeleteUserItems(_CurrentSelectUserRecord);
//刷新“用戶列表”
_UserListProp.LoadAndShowUserListInfo(_UserProxy.Users);
//通知“用戶窗體”操作類掩缓,清空窗體信息
SendNotification(ProConsts.Msg_ClearUserInfo);
}
}
//提交(處理)增加“新用戶”操作
private void SubmitNewUser(UserVO newUserVo)
{
//調(diào)用模型層代理方法,增加一條記錄
if (_UserProxy!=null && newUserVo!=null)
{
_UserProxy.AddUserItem(newUserVo);
//刷新窗體信息
_UserListProp.LoadAndShowUserListInfo(_UserProxy.Users);
}
}
//提交(處理)更新用戶信息操作
private void SubmitUpdateUserInfo(UserVO needUpdateUserVo)
{
//調(diào)用模型層代理方法遵岩,增加一條記錄
if (_UserProxy != null && needUpdateUserVo != null)
{
_UserProxy.UpdateUserItems(needUpdateUserVo);
//刷新窗體信息
_UserListProp.LoadAndShowUserListInfo(_UserProxy.Users);
}
}
#endregion
}
}
UserFormMediator
/***
*
* Title: "App應(yīng)用" 項(xiàng)目
* 主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目
*
* 視圖層: 用戶窗體操作類
*
* Description:
* 功能:
*
* Date: 2021.4.9
* Version: 0.1版本
* Modify Recoder:
*
*
*/
using System.Collections;
using System.Collections.Generic;
using PureMVC.Interfaces;
using PureMVC.Patterns;
using UnityEngine;
namespace AppByPureMVC
{
/// <summary>
/// 用戶類型
/// </summary>
public enum UserFormType
{
//創(chuàng)建(新用戶)
Create,
//更新
Update
}
public class UserFormMediator:Mediator
{
public new const string NAME = "UserFormMediator";
//操作模式
private UserFormType _UserFromType = UserFormType.Create;
//(只讀)屬性
private UserForm _UserForm_Prop
{
get
{
return base.ViewComponent as UserForm;
}
}
/// <summary>
/// 構(gòu)造函數(shù)
/// </summary>
public UserFormMediator():base(NAME)
{
//空
}
/// <summary>
/// 初始化方法
/// </summary>
/// <param name="userFormObj"></param>
internal void InitUserFormMediator(UserForm userFormObj)
{
if (userFormObj!=null)
{
base.m_mediatorName = NAME;
base.m_viewComponent = userFormObj;
//委托注冊
_UserForm_Prop.HandlerComfirmButton = SumitUserInfo;
}
}
/// <summary>
/// 關(guān)注消息內(nèi)容
/// </summary>
/// <returns></returns>
public override IList<string> ListNotificationInterests()
{
IList<string> list=new List<string>();
//初始化本類實(shí)例
list.Add(ProConsts.Msg_InitUserFormMediator);
//接受用戶選擇的用戶信息
list.Add(ProConsts.Msg_SelUserInfoByUserListMedToUserFormMed);
//增加一條用戶信息
list.Add(ProConsts.Msg_AddNewUserInfo);
//清除用戶信息
list.Add(ProConsts.Msg_ClearUserInfo);
return list;
}
/// <summary>
/// 處理消息通知
/// </summary>
/// <param name="notification"></param>
public override void HandleNotification(INotification notification)
{
switch (notification.Name)
{
//初始化信息
case ProConsts.Msg_InitUserFormMediator:
UserForm userFormObj=notification.Body as UserForm;
InitUserFormMediator(userFormObj);
break;
//用戶選擇信息
case ProConsts.Msg_SelUserInfoByUserListMedToUserFormMed:
_UserFromType = UserFormType.Update;
UserVO userVoObj = notification.Body as UserVO;
DisplayAndUpdateUserForm(UserFormType.Update,userVoObj);
break;
//增加用戶信息
case ProConsts.Msg_AddNewUserInfo:
_UserFromType = UserFormType.Create;
DisplayAndUpdateUserForm(UserFormType.Create);
break;
//清除用戶信息
case ProConsts.Msg_ClearUserInfo:
_UserFromType = UserFormType.Create;
_UserForm_Prop.ClearForm();
break;
default:
break;
}
}
/// <summary>
/// 顯示: 更新與顯示用戶的窗體信息
/// </summary>
/// <param name="showType"></param>
/// <param name="userVoObj"></param>
private void DisplayAndUpdateUserForm(UserFormType showType,UserVO userVoObj=null)
{
if (_UserForm_Prop!=null)
{
_UserForm_Prop.ShowUserFormInfo(showType,userVoObj);
}
}
/// <summary>
/// 提交: 用戶點(diǎn)擊“確認(rèn)”按鈕你辣,提交信息
/// </summary>
private void SumitUserInfo()
{
switch (_UserFromType)
{
case UserFormType.Create:
AddNewUserInfo();
break;
case UserFormType.Update:
if (_UserForm_Prop.UserVO!=null)
{
UpdateUserFrom(_UserForm_Prop.UserVO);
}
break;
default:
break;
}
}
/// <summary>
/// 提交:增加新用戶
/// 功能:往“用戶列表”Mediatro 發(fā)送消息,增加一條新記錄尘执,且顯示舍哄。
/// </summary>
private void AddNewUserInfo()
{
SendNotification(ProConsts.Msg_AddNewUserInfoToUserListMed,_UserForm_Prop.UserVO);
}
/// <summary>
/// 提交:更新用戶信息
/// 功能:往“用戶列表”Mediatro 發(fā)送消息,更新指定記錄信息且顯示誊锭。
/// </summary>
private void UpdateUserFrom(UserVO uservoObj)
{
SendNotification(ProConsts.Msg_UpdateUserInfoToUserListMed, uservoObj);
}
}
}
UserForm
/***
*
* Title: "App應(yīng)用" 項(xiàng)目
* 主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目
*
* 視圖層: 用戶信息窗體
*
* Description:
* 功能: 顯示用戶的單條信息(為了查看表悬、更新)
*
* Date: 2021.4.9
* Version: 0.1版本
* Modify Recoder:
*
*
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace AppByPureMVC
{
public class UserForm:MonoBehaviour{
//委托
public System.Action HandlerComfirmButton;
//用戶控件
public Button BtnComfirm; //確認(rèn)按鈕
public InputField Inp_FirstName;
public InputField Inp_LastName;
public Toggle Tog_Male;
public Toggle Tog_Famale;
public InputField Inp_Department;
public InputField Inp_Telphone ;
public InputField Inp_Email;
//用戶實(shí)體類
private UserVO _UserVO;
//(只讀)屬性
public UserVO UserVO
{
get { return _UserVO; }
}
void Start()
{
//注冊按鈕事件
BtnComfirm.onClick.AddListener(HandleConfirmButtonClick);
//凍結(jié)確認(rèn)按鈕
FreezeConfirmButton();
//控件注冊
Inp_FirstName.onValueChanged.AddListener(ClickInputControl);
}
/// <summary>
/// 顯示用戶窗體信息
/// </summary>
/// <param name="showType"></param>
/// <param name="userVo"></param>
public void ShowUserFormInfo(UserFormType showType,UserVO userVo=null)
{
switch (showType)
{
case UserFormType.Create:
ClearForm();
break;
case UserFormType.Update:
ShowUserFormInfo(userVo);
break;
default:
break;
}
}
/// <summary>
/// 顯示用戶窗體信息
/// </summary>
/// <param name="userVoObj"></param>
private void ShowUserFormInfo(UserVO userVoObj)
{
if (userVoObj!=null)
{
_UserVO = userVoObj;
//控件顯示
Inp_FirstName.text = userVoObj.FirstName;
Inp_LastName.text = userVoObj.LastName;
if (userVoObj.Gender)
{
Tog_Male.isOn = true;
}
else
{
Tog_Famale.isOn = true;
}
Inp_Department.text = userVoObj.Department;
Inp_Telphone.text = userVoObj.Telephone;
Inp_Email.text = userVoObj.Email;
}
}
/// <summary>
/// 清空窗體
/// </summary>
public void ClearForm()
{
_UserVO = null;
Inp_FirstName.text = "";
Inp_LastName.text = "";
Inp_Department.text = "";
Inp_Telphone.text = "";
Inp_Email.text = "";
//凍結(jié)“確認(rèn)”按鈕
FreezeConfirmButton();
}
#region 私有方法
/// <summary>
/// 處理“確認(rèn)”按鈕
/// </summary>
private void HandleConfirmButtonClick()
{
//窗體數(shù)據(jù)合法性檢查
if (!CheckUserForm())
{
return;
}
//調(diào)用委托
if (HandlerComfirmButton!=null)
{
HandlerComfirmButton.Invoke();
}
}
/// <summary>
/// 檢查用戶窗體信息(即:不允許用戶輸入“空”信息)
/// 返回:true 表示數(shù)據(jù)合法
/// </summary>
/// <returns></returns>
private bool CheckUserForm()
{
if (_UserVO==null)
{
_UserVO=new UserVO();
}
//獲取數(shù)據(jù)
_UserVO.FirstName = Inp_FirstName.text;
_UserVO.LastName = Inp_LastName.text;
if (Tog_Male.isOn)
{
_UserVO.Gender = true;
}
else if (Tog_Famale.isOn)
{
_UserVO.Gender = false;
}
_UserVO.Department = Inp_Department.text;
_UserVO.Telephone = Inp_Telphone.text;
_UserVO.Email = Inp_Email.text;
//數(shù)據(jù)檢查
if (_UserVO.IsValid)
{
return true;
}
return false;
}
/// <summary>
/// 凍結(jié)確認(rèn)按鈕
/// </summary>
private void FreezeConfirmButton()
{
BtnComfirm.interactable = false;
}
/// <summary>
/// 顯示“確認(rèn)”按鈕
/// </summary>
private void ShowConfirmButton()
{
BtnComfirm.interactable = true;
}
//檢查控件輸入信息
private void ClickInputControl(string strInput)
{
if (!string.IsNullOrEmpty(strInput))
{
//允許顯示
ShowConfirmButton();
}
}
#endregion
}
}
UserList
/***
*
* Title: "App應(yīng)用" 項(xiàng)目
* 主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目
*
* 視圖層: 用戶列表信息腳本
*
* Description:
* 功能:
*
* Date: 2021.4.9
* Version: 0.1版本
* Modify Recoder:
*
*
*/
using System.Collections;
using System.Collections.Generic;
//using System.Net.Mime;
//using Boo.Lang;
using UnityEngine;
using UnityEngine.UI;
namespace AppByPureMVC
{
public class UserList:MonoBehaviour{
//系統(tǒng)委托
public System.Action NewUser; //新用戶
public System.Action SelectUser; //選擇用戶信息
public System.Action DeleteUser; //刪除用戶信息
//用戶列表
public UserList_Item UserListItemPrefab;
//文本控件
public Text TxtUseListNumber; //用戶列表數(shù)量
//按鈕控件
public Button btn_New; //新建用戶控件
public Button btn_Delete; //刪除用戶控件
//用戶列表信息集合
private List<UserList_Item> _UserListInfo = new List<UserList_Item>();
void Start()
{
//初始化字段
TxtUseListNumber.text = "0";
//設(shè)置隱藏
UserListItemPrefab.gameObject.SetActive(false);
//按鈕事件注冊
btn_New.onClick.AddListener(ClickBtn_New);
btn_Delete.onClick.AddListener(ClickBtn_Delete);
//默認(rèn),凍結(jié)刪除按鈕
FreezeDeleteButton();
}
/// <summary>
/// 提取顯示用戶列表信息
/// </summary>
/// <param name="listInfo">需要信息的信息集合</param>
public void LoadAndShowUserListInfo(IList<UserVO> listInfo )
{
//清空列表信息
ClearItems();
//克隆與顯示列表信息
foreach (UserVO userVo in listInfo)
{
UserList_Item item = CloneUserVoInfo();
//克隆的對(duì)象丧靡,顯示信息
item.DisplayUserItem(userVo);
//加入集合保存
_UserListInfo.Add(item);
}
//統(tǒng)計(jì)數(shù)量
TxtUseListNumber.text = _UserListInfo.Count.ToString();
}
//凍結(jié)刪除按鈕
public void FreezeDeleteButton()
{
btn_Delete.interactable = false;
}
//顯示刪除按鈕
public void ShowDeleteButton()
{
btn_Delete.interactable = true;
}
#region 私有方法
//克隆用戶信息
private UserList_Item CloneUserVoInfo()
{
UserList_Item item = null;
//參數(shù)檢查
if (UserListItemPrefab!=null)
{
item=GameObject.Instantiate<UserList_Item>(UserListItemPrefab);
//設(shè)置父節(jié)點(diǎn)
item.transform.SetParent(UserListItemPrefab.transform.parent);
//顯示克隆的節(jié)點(diǎn)
item.gameObject.SetActive(true);
//定義尺寸與相對(duì)位置
item.transform.localScale = Vector3.one;
item.transform.localPosition = Vector3.zero;
}
return item;
}
//用戶點(diǎn)擊“新用戶”按鈕
private void ClickBtn_New()
{
if(NewUser!=null)
{
NewUser.Invoke();
}
}
//用戶點(diǎn)擊“刪除”按鈕
private void ClickBtn_Delete()
{
if (DeleteUser != null)
{
DeleteUser.Invoke();
}
}
//清空列表信息
private void ClearItems()
{
if (_UserListInfo!=null)
{
foreach (UserList_Item item in _UserListInfo)
{
Destroy(item.gameObject);
}
_UserListInfo.Clear();
}
}
#endregion
}
}
UserList_Item
/***
*
* Title: "App應(yīng)用" 項(xiàng)目
* 主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目
*
* 視圖層: 用戶列表信息(一條記錄)
* Description:
* 功能:顯示用戶列表蟆沫,一條記錄籽暇。
*
* Date: 2021.4.9
* Version: 0.1版本
* Modify Recoder:
*
*
*/
using System.Collections;
using System.Collections.Generic;
using System.Net.Mime;
using PureMVC.Patterns;
using UnityEngine;
using UnityEngine.UI;
namespace AppByPureMVC
{
public class UserList_Item:MonoBehaviour
{
public Text TxtUserName;
public Text TxtGender;
public Text TxtDepartment;
public Text TxtTel;
public Text TxtEmail;
//用戶當(dāng)前選擇的數(shù)據(jù)實(shí)體類
private UserVO _CurrentUserSelectVO;
//選擇控件
private Toggle _ToggleUserItem;
void Start()
{
//得到Togggle 控件
_ToggleUserItem = this.GetComponent<Toggle>();
//注冊Toggle 事件
_ToggleUserItem.onValueChanged.AddListener(OnValuesChangByToggle);
}
/// <summary>
/// 顯示用戶數(shù)據(jù)項(xiàng)(一條記錄)
/// </summary>
/// <param name="userData"></param>
public void DisplayUserItem(UserVO userData)
{
if (userData!=null)
{
//保存當(dāng)前一條信息
_CurrentUserSelectVO = userData;
//顯示內(nèi)容
if (TxtUserName) TxtUserName.text = userData.UserName;
if (TxtGender)
{
if (userData.Gender)
{
TxtGender.text = "男";
}
else
{
TxtGender.text = "女";
}
}
if (TxtDepartment) TxtDepartment.text = userData.Department;
if (TxtTel) TxtTel.text = userData.Telephone;
if (TxtEmail) TxtEmail.text = userData.Email;
}
}
//用戶選擇事件
public void OnValuesChangByToggle(bool isSelect)
{
if (isSelect)
{
//要把用戶選擇的信息,發(fā)送到“列表信息Mediator類”
Facade.Instance.SendNotification(ProConsts.Msg_SelectUserInfoByCtrlToUserListMediator, _CurrentUserSelectVO);
}
}
}
}