private void InitData()
 {
     ClearChilds();
     for (int i = 0; i < GOs.Count; i++)
     {
         if (GOs[i] == null)
         {
             CLog.Error("有的GO为null");
         }
     }
     UControl[] ts = GOs.Where(go => go != null).Select(go => go.GetComponent <UControl>()).ToArray();
     for (int i = 0; i < ts.Length; i++)
     {
         if (ts[i] == null)
         {
             CLog.Error(string.Format("取出组件为null, type={0},如果想要忽略,请添加IgnoreElement组件", typeof(UControl)));
             break;
         }
         else
         {
             if (AddDynamicChild(ts[i]))
             {
                 ts[i].SetIndex(i);
                 ts[i].SetDataIndex(i);
                 ts[i].PDupplicate = this;
             }
         }
     }
 }
Exemple #2
0
 public TP[] GetGOs <TP, TD>(TD data = null) where TP : Presenter <TD> where TD : PresenterData, new()
 {
     if (data == null)
     {
         data = new TD();
     }
     for (int i = 0; i < GOs.Count; i++)
     {
         if (GOs[i] == null)
         {
             CLog.Error("有的GO为null");
         }
     }
     TP[] ts = GOs.Where(go => go != null).Select(go => go.GetComponent <TP>()).ToArray();
     for (int i = 0; i < ts.Length; i++)
     {
         if (ts[i] == null)
         {
             CLog.Error(string.Format("取出组件为null, type={0}", typeof(TP)));
             break;
         }
         else
         {
             ts[i].SetIndex(i);
             ts[i].BaseDupplicate = this;
             AddChild(ts[i], true);
             if (data != null)
             {
                 ts[i].Init(data);
             }
         }
     }
     return(ts);
 }
 private TP[] InitData <TP, TD>(TD[] data)
     where TP : UPresenter <TD>
     where TD : UPresenterData, new()
 {
     ClearChilds();
     for (int i = 0; i < GOs.Count; i++)
     {
         if (GOs[i] == null)
         {
             CLog.Error("有的GO为null");
         }
     }
     TP[] ts = GOs.Where(go => go != null).Select(go => go.GetComponent <TP>()).ToArray();
     for (int i = 0; i < ts.Length; i++)
     {
         if (ts[i] == null)
         {
             CLog.Error(string.Format("取出组件为null, type={0},如果想要忽略,请添加IgnoreElement组件", typeof(TP)));
             break;
         }
         else
         {
             if (AddDynamicChild(ts[i]))
             {
                 ts[i].SetIndex(i);
                 ts[i].SetDataIndex(i);
                 ts[i].PDupplicate = this;
             }
             //if (
             //    Data.OnRefresh == null &&
             //    Data.OnFixedRefresh == null)
             {
                 if (data != null)
                 {
                     if (i < data.Length)
                     {
                         ts[i].Init(data[i]);
                     }
                 }
                 else
                 {
                     ts[i].Init(new TD());
                 }
             }
         }
     }
     return(ts);
 }
        // 通过数量初始化
        private void InitCount(int count)
        {
            if (IsInitedCount)
            {
                CLog.Error("InitCount 无法初始化2次!!!! " + Path);
                return;
            }
            IsInitedCount = true;
            GOs.Clear();
            for (int i = 0; i < Trans.childCount; ++i)
            {
                Transform temp = Trans.GetChild(i);
                var       ele  = temp.GetComponent <LayoutElement>();
                if (ele != null && ele.ignoreLayout)
                {
                    continue;
                }
                var ignore = temp.GetComponent <UIgnore>();
                if (ignore != null)
                {
                    continue;
                }
                GOs.Add(temp.gameObject);
            }
            if (Prefab == null && GOs.Count > 0)
            {
                Prefab = GOs[0];
            }
            if (Prefab == null)
            {
                CLog.Error("{0}: Prefab == null", Path);
                return;
            }
            if (Prefab.name.StartsWith(Const.STR_Base))
            {
                CLog.Error($"不能使用基础UI Prefab 初始化:{Prefab.name}");
            }

            //差值
            int subCount = count - GOs.Count;

            if (subCount > 0)
            {
                //生成剩余的游戏对象
                for (int i = 0; i < subCount; ++i)
                {
                    GameObject temp = GameObject.Instantiate(Prefab, this.RectTrans.position, this.RectTrans.rotation);
                    (temp.transform as RectTransform).SetParent(this.RectTrans);
                    (temp.transform as RectTransform).localScale = Vector3.one;
                    GOs.Add(temp);
                }
            }

            Controls.Clear();
            for (int i = 0; i < GOs.Count; ++i)
            {
                var tempPresenter = GOs[i].GetComponent <UControl>();
                if (tempPresenter == null)
                {
                    CLog.Error("Item:没有添加组件");
                    return;
                }
                Controls.Add(tempPresenter);

                if (i < count)
                {
                    tempPresenter.Show(true);
                }
                else
                {
                    tempPresenter.Show(false);
                }

                if (tempPresenter is UCheckBox checkBox)
                {
                    ToggleGroupCheckBoxs.Add(checkBox);
                }
            }
        }
Exemple #5
0
        /// <summary>
        /// 通过数量初始化
        /// </summary>
        /// <param name="count"></param>
        public void InitCount <TP, TD>(int count) where TP : Presenter <TD>, new() where TD : PresenterData, new()
        {
            if (IsInitedCount)
            {
                CLog.Error("InitCount 无法初始化2次!!!!");
                return;
            }
            IsInitedCount = true;
            GOs.Clear();
            for (int i = 0; i < Trans.childCount; ++i)
            {
                Transform temp = Trans.GetChild(i);
                var       ele  = temp.GetComponent <LayoutElement>();
                if (ele != null && ele.ignoreLayout)
                {
                    continue;
                }
                GOs.Add(temp.gameObject);
                temp.gameObject.SetActive(false);
            }
            if (Prefab == null && GOs.Count > 0)
            {
                Prefab = GOs[0];
            }
            if (Prefab == null)
            {
                CLog.Error("{0}: Prefab == null", Path);
                return;
            }
            if (count <= 0)
            {
                CLog.Error("Count <= 0");
            }
            if (Prefab.name.StartsWith(BaseConstMgr.STR_Base))
            {
                CLog.Error($"不能使用基础UI Prefab 初始化:{Prefab.name}");
            }

            //差值
            int subCount = count - GOs.Count;

            if (subCount > 0)
            {
                //生成剩余的游戏对象
                for (int i = 0; i < subCount; ++i)
                {
                    GameObject temp = GameObject.Instantiate(Prefab, this.RectTrans.position, this.RectTrans.rotation) as GameObject;
                    (temp.transform as RectTransform).SetParent(this.RectTrans);
                    (temp.transform as RectTransform).localScale = Vector3.one;
                    GOs.Add(temp);
                }
            }

            for (int i = 0; i < count; ++i)
            {
                GOs[i].SetActive(true);
                var tempPresenter = GOs[i].GetComponent <TP>();
                Presenters.Add(tempPresenter);

                if (tempPresenter is BaseCheckBox checkBox)
                {
                    checkBox.IsToggleGroup = IsToggleGroup;
                    ToggleGroupCheckBoxs.Add(checkBox);
                }
            }

            //设置数量
            //Count = GOs.Count;
        }