今天做了一个单选框,有十几个toggle,放在一个toggleGroup下面,用GetComponentsInChildren方法获取。
toggles = toggleGroup.GetComponentsInChildren<Toggle>();
按如下代码循环添加监听,发现方法触发时传入的参数不对,总是数组最后一个,而不是对应的toggle。
for (int i = 0; i < toggles.Length; i++)
{
toggles[i].onValueChanged.AddListener(delegate { onValueChanged(toggles[i]); });
}
问题原因:方法触发时 i 值始终为 toggles.Length - 1
解决方法:在循环内声明一个toggle引用作为参数传递,代码修改如下:
for (int i = 0; i < toggles.Length; i++)
{
Toggle toggle = toggles[i];
toggle.onValueChanged.AddListener(delegate { onValueChanged(toggle); });
}