扩展Dropdown, 使dropdown支持多选
参考文章 https://www.cnblogs.com/chinarbolg/p/9601417.html 进行扩展后,dropdown已经可以支持重复选择了。
添加一个标记选项状态的值
// 当前筛选的技能质量标记 public int SelectIndexBitMark = 0;
修改重写的Show()方法
public new void Show () { base.Show (); Transform toggleRoot = transform.Find ("Dropdown List/Viewport/Content"); Toggle[] toggleList = toggleRoot.GetComponentsInChildren<Toggle> (false); for (int i = 0; i < toggleList.Length; i++) { Toggle temp = toggleList[i]; temp.onValueChanged.RemoveAllListeners (); // temp.isOn = false; // 原文 temp.isOn = ((1 << i) & SelectIndexBitMark) > 0; // 改造后 temp.onValueChanged.AddListener (x => OnSelectItemEx (temp)); } }
在SelectItemEx中增加状态标记的赋值
public void OnSelectItemEx (Toggle toggle) { if (!toggle.isOn) { toggle.isOn = true; return; } int selectedIndex = -1; Transform tr = toggle.transform; Transform parent = tr.parent; for (int i = 0; i < parent.childCount; i++) { if (parent.GetChild (i) == tr) { selectedIndex = i - 1; break; } } if (selectedIndex < 0) return; if (value == selectedIndex && AlwaysCallback) onValueChanged.Invoke (value); else value = selectedIndex; SelectIndexBitMark ^= 1 << value; // 新增 Hide (); }
齐活