获取切换组中的所有非活动切换

Getting all the non active toggles in a toggle Group

正如它所说,我想将所有切换按钮的图像更改回默认值,但活动按钮除外,因此我需要一种方法来获取所有非活动切换按钮。比 onClick() 切换按钮的方法随着图像的变化,我可以为每个人移动默认图像并为所选图像显示突出显示的图像。我不能用目标图形和图形来做,因为我不想要要更改完整图像,我有一张背景图像,只想将其更改为突出显示的图像。

ToggleGroup 在这种情况下没有任何帮助,但看看这个 soultion:

一个。创建自定义切换组件并使用它代替原始 Toggle

public class MyToggle : Toggle 
{
    public static Dictionary<ToggleGroup, List<Toggle>> allToggles = new Dictionary<ToggleGroup, List<Toggle>> ();

    protected override void Start()
    {
        base.Start();

        if (group != null)
        {
            if (!MyToggle.allToggles.ContainsKey(group))
                MyToggle.allToggles.Add(group, new List<Toggle>());

            MyToggle.allToggles[group].Add(this);
        }
    }
}

乙。为 ToggleGroup 创建扩展:

namespace UIExtensionNS
{
    public static class UIExtension
    {
        public static List<Toggle> GetAllInactiveToggles(this ToggleGroup group)
        {
            if (!MyToggle.allToggles.ContainsKey(group))
                return null;

            List<Toggle> toReturn = new List<Toggle>();

            foreach (Toggle tgg in MyToggle.allToggles[group])
            {
                if (tgg.isOn)
                    continue;

                toReturn.Add(tgg);
            }

            return toReturn;
        }
    }
}

C。测试一下:)

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UIExtensionNS;

public class Test : MonoBehaviour 
{
    public ToggleGroup toggleGroup;

    IEnumerator Start () 
    {
        // it is just to ensure it runs after all MyToggle.Start
        yield return null;

        var allInactive = toggleGroup.GetAllInactiveToggles();

        foreach (var tggl in allInactive)
        {
            Debug.Log(tggl.isOn);
        }
    }
}