using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace ZTools { [RequireComponent(typeof(ZCalendarModel))] public class ZCalendar : MonoBehaviour { /// /// 数据更新时,可获取到每一个日期,并对其进行操作 /// public event Action UpdateDateEvent; /// /// 可以获取到点击的某一天 /// public event Action ChoiceDayEvent; /// /// 选择区间时间事件 /// public event Action RangeTimeEvent; /// /// 日历加载结束 /// public event Action CompleteEvent; /// /// 获取当前选中的天对象 /// public ZCalendarDayItem CrtTime { get; set; } /// /// model /// private ZCalendarModel zCalendarModel; /// /// controller /// private ZCalendarController zCalendarController; /// /// 入口 /// private void Start() { zCalendarModel = this.GetComponent(); zCalendarController = new ZCalendarController() { zCalendar = this, zCalendarModel = zCalendarModel, pos = this.transform.localPosition }; zCalendarController.Init(); // 开启时自动初始化 if (zCalendarModel.awake2Init) { Init(); } } /// /// 按照现在时间初始化 /// public void Init() { zCalendarController.InitDate(DateTime.Now); } /// /// 按照DateTime格式初始化日历 /// public void Init(DateTime dateTime) { zCalendarController.InitDate(dateTime); } /// /// 按照YYYY-MM-DD格式初始化日历 /// public void Init(string dateTime) { string[] dateTimes = dateTime.Split('-'); zCalendarController.InitDate(new DateTime(int.Parse(dateTimes[0]), int.Parse(dateTimes[1]), int.Parse(dateTimes[2]))); } /// /// 显示弹窗 /// public void Show() { zCalendarController.Show(); } /// /// 隐藏弹窗 /// public void Hide() { Debug.Log("调用了"); zCalendarController.Hide(); } /// /// 切换时间 /// /// [Obsolete("事件触发器,请使用UpdateDateEvent获取切换月份时加载的时间对象")] public void UpdateDate(ZCalendarDayItem obj) { if (null != UpdateDateEvent) { UpdateDateEvent.Invoke(obj); } } /// /// 日期点击 /// [Obsolete("事件触发器,请使用ChoiceDayEvent获取当前选择的时间")] public void DayClick(ZCalendarDayItem dayItem) { if (null != ChoiceDayEvent) { ChoiceDayEvent.Invoke(dayItem); } CrtTime = dayItem; } /// /// 加载结束 /// [Obsolete("事件触发器,请使用CompleteEvent获取日历加载完成事件")] public void DateComplete() { if (null != CompleteEvent) { CompleteEvent.Invoke(); } } /// /// 区间日期选择 /// /// /// [Obsolete("事件触发器,请使用RangeTimeEvent获取区间时间")] public void RangeCalendar(ZCalendarDayItem firstDay, ZCalendarDayItem secondDay ) { if (null != RangeTimeEvent) { RangeTimeEvent.Invoke(firstDay, secondDay); } } private void OnDestroy() { zCalendarController = null; GC.Collect(); } } }