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

时间:2016-08-26 14:06:25

标签: unity3d toggle

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

1 个答案:

答案 0 :(得分:1)

ToggleGroup在这种情况下没有任何帮助,但请看一下这个灵魂:

:一种。创建自定义切换组件并使用它而不是原始切换

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);
        }
    }
}

<强> B中。为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;
        }
    }
}

<强>℃。测试一下:)

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);
        }
    }
}