1. 程式人生 > >UGUI學習筆記(五) ToggleGroup製作選擇題單選框

UGUI學習筆記(五) ToggleGroup製作選擇題單選框

      UGUI有一個Toggle元件 用來製作一個可勾選的選項,元件面板如下圖所示


      其中Interactable選項用來選擇是否可操作,不勾選的話就是不可操作的,isOn是用來判斷當前這個Toggle的勾選狀態,OnValueChanged是當前Toggle值被改變時會被呼叫,可以在程式碼里加監聽,也可以講物件直接拖在面板裡選擇方法來監聽。重點說一下這個Group屬性。

      在其他物體上掛載一個ToggleGroup選項,再在其他Toggle面板的Group上將這個ToggleGroup物體拖進去,那這些Toggle就成為了一個組,一個組裡的Toggle只能有一個Toggle被勾選。ToggleGroup面板如下圖所示:


    面板很簡單隻有一個AllowSwitchOff的屬性,用來選擇所有Toggle能不能同時被不勾選。但是它有一些方法需要說明一下。

ToggleGroup繼承自UIBehaviour,可以將多個Toggle分到一個組裡而保持至多一個Toggle狀態為On。它有一個m_Toggles的成員變數,這是一個Toggle型別的List,用於儲存註冊在該ToggleGroup的所有Toggle。上文也講到了,Toggle在OnEnable的時候註冊到group,OnDisable的時候移出group,另外通過為group屬性賦值也可以讓Toggle註冊到指定的ToggleGroup(一般是編輯器幫我們設定)。

註冊和移出的程式碼很簡單,就是將toggle加入m_Toggles或從m_Toggles刪除。NotifyToggleOn這個方法是將除了輸入的Toggle之外所有的Toggle都關閉(isOn = false)。我們也可以呼叫ToggleGroup的一些方法,例如AnyTogglesOn判斷是否有Toggle開啟(Toggle的set方法也呼叫了這個方法,即沒有任何Toggle開啟且group不允許全部Toggle關閉的時候,強制設為開啟),ActiveToggles獲取開啟的Toggle,SetAllTogglesOff關閉所有Toggle。

ActiveToggles獲取開啟的Toggle,這個方法返回的是IEnumerable<Toggle> 這個型別的一個Toggle的集合,想要把Toggle型別讀出來,得通過以下程式碼


        IEnumerable<Toggle> answersGroup = ToggleGroup.ActiveToggles();
        foreach (Toggle t in answersGroup)
        {//遍歷這個存放Toggle的按鈕組IEnumerable,此乃C#的一個列舉集合,一般直接用foreach遍歷  
            if (t.isOn)//遍歷到一個被選擇的Toggle  
            {
                switch (t.name)//根據這個Toggle的name,我們給string sex賦予不同的值  
                {
                    case "Toggle0":
                        sex = "男";
                        break;
                    case "Toggle1":
                        sex = "女";
                        break;
                }
                break;//就沒必要遍歷下去了,後面已經可以預見到,都是沒被選擇的Toggle。  
            }
        }