在循环内添加监听碰到的坑

    今天做了一个单选框,有十几个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);  });
            }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章