Unity|单选框->多选框->单选框

最近的项目中涉及到了单选、多选的问题:

  1. 正常情况下,每一个图片为单选,选中以后进行OCR文字识别;
  2. 点击了删除按钮,所有的图片变为可多选状态。完成或取消删除操作后,再变为单选状态。

我们都知道控制一系列物体是否为单选的条件为<Toggle>组件的Group是否为同一个,那么变为多选状态时,只需将Group置为Null。

我的问题就出在取消删除操作之前,有几个图片是选中状态,那么,我需要用以下的代码设置isOn=false,并且设置为单选状态:

 foreach (Transform item in content.transform)
 {
      Toggle toggle = item.Find("Toggle").GetComponent<Toggle>();

      toggle.group = content.GetComponent<ToggleGroup>();
      if (toggle.isOn)
      {
           toggle.isOn = false;
      }
 }

逻辑看似是对的,但运行效果如下(注意:在点击删除按钮之前,所有的Image都处于不选中状态):

从上图可以看到,取消删除操作后有一个Image为选中状态,但我明明把所有的isOn都设置为了false。。。细想了很久,把代码改成了下方这种:

         foreach (Transform item in content.transform)
            {
                Toggle toggle = item.Find("Toggle").GetComponent<Toggle>();
                
                if (toggle.isOn)
                {
                    toggle.isOn = false;
                }
                toggle.group = content.GetComponent<ToggleGroup>();
            }

对比上方两个代码,只是将isOn和group的操作顺序发生了变化,但这次效果就对了:

得出结论:在多选状态下,选择数量可以等于0,但在单选状态下,必定有一个Image为选定状态,你的isOn=false是不管用滴。所以一定要在多选状态下isOn=false,再设置为单选状态,而不能先设置单选状态,后isOn=false。

发布了162 篇原创文章 · 获赞 20 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_39766005/article/details/90752096