Today,有个小同志问了我一个关于UGUI的Toggle的问题,说能不能实现多选,当时我就想ToggleGroup应该就可以,结果试了试,并没有什么卵用,ToggleGroup只是单选。所以就有了现在的这个文章,在这里还要感谢那位小同志,不然我还发现不了这个问题。好了,下面说一下实现原理。其实,原理还是很简单的,就是获取所有的Toggle,然后看哪个是开启状态,然后判断是否达到可多选的最大数量,如果够了,就把剩下的未选中的屏蔽掉。不能继续选择,如果想要换选项,可以把选中的变成未选中的,继续选择。废话不多说,下面是代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ToggleGroupPro : MonoBehaviour { public int OptionsNumber = 0; private List<Toggle> m_Toggles = new List<Toggle>(); public List<Toggle> Toggles { get { for (int i = 0; i < transform.childCount; i++) { GameObject go = transform.GetChild(i).gameObject; if (go.activeSelf) { Toggle t = go.GetComponent<Toggle>(); if (t == null) continue; if (!m_Toggles.Contains(t)) { m_Toggles.Add(t); } } } return m_Toggles; } } private List<Toggle> m_ActiveToggles = new List<Toggle>(); public List<Toggle> ActiveToggles { get { return Toggles.GetNumberofBoolean(true); } } private void Awake() { OptionsNumber = OptionsNumber < Toggles.Count ? OptionsNumber : Toggles.Count; } // Start is called before the first frame update void Start() { for (int i = 0; i < Toggles.Count; i++) { Toggles[i].onValueChanged.AddListener(OnTogglesValueChanged); } } public void OnTogglesValueChanged(bool value) { for (int i = 0; i < Toggles.Count; i++) { Toggles[i].interactable = (ActiveToggles.Count >= OptionsNumber) && !Toggles[i].isOn ? false : true; } } // Update is called once per frame void Update() { } } public static class Develop { public static List<Toggle> GetNumberofBoolean(this List<Toggle> toggles, bool value) { List<Toggle> ts = new List<Toggle>(); for (int i = 0; i < toggles.Count; i++) { if (toggles[i].isOn == value) { if (!ts.Contains(toggles[i])) { ts.Add(toggles[i]); } } } return ts; } } |
只要将上面的代码拖到Toggle的父物体上就可以了。可以设置可选择的数量。也可以获取到所有选中的Toggle。文章源自大腿Plus-https://www.zhaoshijun.com/archives/1209
文章源自大腿Plus-https://www.zhaoshijun.com/archives/1209 文章源自大腿Plus-https://www.zhaoshijun.com/archives/1209
我的微信
微信扫一扫
shijun_z
我的QQ
QQ扫一扫
846207670
评论