75 lines
2.5 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
}
|