using System.Collections; using System.Collections.Generic; using UnityEngine; public class UIContainerMultiSelect : UIContainerSelect { public int multiSelectNum = -1; // 多选的情况下,最多可选择数量,默认-1,表示可无限多选 public UIItemMultiSelect curHightLight; // 当前高亮选中Item。 public override void OnSelectedObj(object obj) { ContentPos selectPos = _ValueList.Find((pos) => { if (pos.Obj == obj) return true; return false; }); if (selectPos == null) return; if (!((UIItemMultiSelect)selectPos.ShowItem).IsCanSelect()) return; if (curHightLight != null) { curHightLight.UnSelected(); ((UIItemMultiSelect)selectPos.ShowItem).Selected(); curHightLight = (UIItemMultiSelect)selectPos.ShowItem; } else { if (_Selecteds.Count != 0) { ((UIItemMultiSelect)_Selecteds[0].ShowItem).UnSelected(); } ((UIItemMultiSelect)selectPos.ShowItem).Selected(); curHightLight = (UIItemMultiSelect)selectPos.ShowItem; } if (_IsMultiSelect) { if (_Selecteds.Contains(selectPos)) { ((UIItemMultiSelect)selectPos.ShowItem).UnAdd(); _Selecteds.Remove(selectPos); } else { // 当不存在时,仅当多选数目没到上限时,添加 if (_Selecteds.Count < multiSelectNum) { ((UIItemMultiSelect)selectPos.ShowItem).Add(); _Selecteds.Add(selectPos); } // 优化:当多选数目设置为1个时,点击其他视作替换 else if (multiSelectNum == 1) { ((UIItemMultiSelect)_Selecteds[0].ShowItem).UnAdd(); _Selecteds.RemoveAt(0); ((UIItemMultiSelect)selectPos.ShowItem).Add(); _Selecteds.Add(selectPos); } } if (_SelectedCallBack != null) { _SelectedCallBack(selectPos.Obj); } } else { if (!_Selecteds.Contains(selectPos)) { _Selecteds.Clear(); _Selecteds.Add(selectPos); } } if (_SelectedCallBack != null && _Selecteds.Contains(selectPos) && !_IsMultiSelect) { _SelectedCallBack(obj); return; } if (_DisSelectedCallBack != null && !_Selecteds.Contains(selectPos) && !_IsMultiSelect) { _DisSelectedCallBack(obj); return; } } public override void InitSelectContent(IEnumerable list, IEnumerable selectedList, SelectedObjCallBack onSelect = null, SelectedObjCallBack onDisSelect = null, Hashtable exhash = null) { foreach (ContentPos item in _Selecteds) { if (item.ShowItem != null) { ((UIItemMultiSelect)item.ShowItem).UnSelected(); ((UIItemMultiSelect)item.ShowItem).UnAdd(); } } curHightLight = null; _SelectedCallBack = onSelect; _DisSelectedCallBack = onDisSelect; gameObject.SetActive(true); _SelectedList = selectedList; base.InitContentItem(list, OnSelectedObj, exhash); ShowItems(); } public override List GetSelecteds() { List selectedObjs = new List(); if (_IsMultiSelect == false) { if (_Selecteds.Count > 0) { selectedObjs.Add((T)_Selecteds[0].Obj); } } else { for (int i = 0; i < multiSelectNum && i < _Selecteds.Count; ++i) { if (_Selecteds[i].Obj == null) { break; } selectedObjs.Add((T)_Selecteds[i].Obj); } } return selectedObjs; } }