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。
}
}