E_ElecCompetition/Electrical_inspectionCompet.../Assets/Script/MyFrameworkPure/Extensions/ToggleGroupExtensions.cs

75 lines
2.5 KiB
C#

using System.Collections.Generic;
using System.Linq;
using UnityEngine.UI;
namespace MyFrameworkPure
{
public static class ToggleGroupExtensions
{
private static System.Reflection.FieldInfo _toggleListMember;
/// <summary>
/// 获取组中的所有Toggle
/// </summary>
/// <param name="grp"></param>
/// <returns></returns>
public static IList<Toggle> GetToggles(this ToggleGroup grp)
{
if (_toggleListMember == null)
{
_toggleListMember = typeof(ToggleGroup).GetField("m_Toggles", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (_toggleListMember == null)
throw new System.Exception("UnityEngine.UI.ToggleGroup source code must have changed in latest version and is no longer compatible with this version of code.");
}
return _toggleListMember.GetValue(grp) as IList<Toggle>;
}
/// <summary>
/// 组中所有Toggle数量
/// </summary>
/// <param name="grp"></param>
/// <returns></returns>
public static int Count(this ToggleGroup grp)
{
return GetToggles(grp).Count;
}
/// <summary>
/// 通过索引值获取Toggle
/// </summary>
/// <param name="grp"></param>
/// <param name="index"></param>
/// <returns></returns>
public static Toggle Get(this ToggleGroup grp, int index)
{
return GetToggles(grp)[index];
}
public static void SetActiveToggleByIndex(this ToggleGroup grp, int index)
{
IList<Toggle> toggles = GetToggles(grp);
toggles = toggles.OrderBy(x => x.transform.GetSiblingIndex()).ToList();
grp.SetAllTogglesOff();
toggles[index].isOn = true;
}
public static void SetActiveToggleByName(this ToggleGroup grp, string name)
{
IList<Toggle> toggles = GetToggles(grp);
grp.SetAllTogglesOff();
toggles.First(x => x.name == name).isOn = true;
}
public static int GetActiveIndex(this ToggleGroup grp)
{
Toggle activeToggle = grp.ActiveToggles().FirstOrDefault();
if (!activeToggle)
return -1;
List<Toggle> toggles = grp.GetToggles().OrderBy(x => x.transform.GetSiblingIndex()).ToList();
return toggles.IndexOf(activeToggle);
}
}
}