9.自定义单选框

9.自定义常用控件-自定义单选框


9.1 知识点

创建自定义单选框,添加多选框数组,通过管理多选框实现单选框,在添加一个记录上一次为true的toggle

//自定义单选框
public class CustomGUIToggleGroup : MonoBehaviour
{
    //多选框数组 通过管理多选框实现单选框
    public CustomGUIToggle[] toggles;
    
    //记录上一次为true的toggle
    private CustomGUIToggle frontTrueToggle;
}

Start中通过遍历多选框数组来为多个多选框添加监听事件函数

void Start()
{
    //判断多选框数组有没有多选框 没有多选框就返回
    if (toggles.Length == 0)
        return;

    frontTrueToggle = toggles[0];
    for (int j = 0; j < toggles.Length; j++)
    {
        toggles[j].isSel = j==0;
    }


    //通过遍历多选框数组 来为多个多选框添加监听事件函数
    //在函数中做处理 当一个为true时 另外两个变成false
    for (int i = 0; i < toggles.Length; i++)
    {
        //取出当前多选框进行记录
        CustomGUIToggle toggle = toggles[i];

        //为当前多选框添加监听事件函数
        toggle.changeValue += (value) =>
        {
            //当传入的value是ture时 需要把另外的多选框变成false
            if ( value )
            {
                //遍历多选框 意味着另外的多选框要变成false
                for (int j = 0; j < toggles.Length; j++)
                {
                    //判断是否是当前取出的多选框 不是当前取出的多选框就设置为不选择
                    //这里有闭包 toggle就是上一个函数中申明的变量 改变了它的生命周期
                    if ( toggles[j] != toggle )
                    {
                        toggles[j].isSel = false;
                    }
                }
                //记录上一次为true的toggle
                frontTrueToggle = toggle;
            }
            //来判断 当前变成false的这个toggle是不是上一次为true
            //如果是 就不应该让它变成false
            //都在有可能全都不选 违反单选框规则
            else if( toggle == frontTrueToggle)
            {
                //强制改成 true
                toggle.isSel = true;
            }
        };

    }
}

9.2 知识点代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//自定义单选框
public class CustomGUIToggleGroup : MonoBehaviour
{
    //多选框数组 通过管理多选框实现单选框
    public CustomGUIToggle[] toggles;

    //记录上一次为true的toggle
    private CustomGUIToggle frontTrueToggle;

    void Start()
    {
        //判断多选框数组有没有多选框 没有多选框就返回
        if (toggles.Length == 0)
            return;

        frontTrueToggle = toggles[0];
        for (int j = 0; j < toggles.Length; j++)
        {
            toggles[j].isSel = j==0;
        }


        //通过遍历多选框数组 来为多个多选框添加监听事件函数
        //在函数中做处理 当一个为true时 另外两个变成false
        for (int i = 0; i < toggles.Length; i++)
        {
            //取出当前多选框进行记录
            CustomGUIToggle toggle = toggles[i];

            //为当前多选框添加监听事件函数
            toggle.changeValue += (value) =>
            {
                //当传入的value是ture时 需要把另外的多选框变成false
                if ( value )
                {
                    //遍历多选框 意味着另外的多选框要变成false
                    for (int j = 0; j < toggles.Length; j++)
                    {
                        //判断是否是当前取出的多选框 不是当前取出的多选框就设置为不选择
                        //这里有闭包 toggle就是上一个函数中申明的变量 改变了它的生命周期
                        if ( toggles[j] != toggle )
                        {
                            toggles[j].isSel = false;
                        }
                    }
                    //记录上一次为true的toggle
                    frontTrueToggle = toggle;
                }
                //来判断 当前变成false的这个toggle是不是上一次为true
                //如果是 就不应该让它变成false
                //都在有可能全都不选 违反单选框规则
                else if( toggle == frontTrueToggle)
                {
                    //强制改成 true
                    toggle.isSel = true;
                }
            };

        }
    }

}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏