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。

 

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值