最近的项目中涉及到了单选、多选的问题:
- 正常情况下,每一个图片为单选,选中以后进行OCR文字识别;
- 点击了删除按钮,所有的图片变为可多选状态。完成或取消删除操作后,再变为单选状态。
我们都知道控制一系列物体是否为单选的条件为<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。