Unity3d Toggle onValueChanged 传参数 错误(始终为最后一个实例的值)

来源:互联网 发布:mac照片管理 编辑:程序博客网 时间:2024/06/08 01:41
    public IEnumerator RefreshFoodInfo()

    {

        yield return new WaitForEndOfFrame();

        for (int i = 0; i < foodPanel.transform.childCount; i++)
        {
            GameObject go = foodPanel.transform.GetChild(i).gameObject;
            Destroy(go);
        }


        foreach (var temp in CSJManager.instance.foodManager.foodDic)
        {
            FoodData food = temp.Value;
            GameObject item = Instantiate(Resources.Load("Prefabs/FoodToggle", typeof(GameObject))) as GameObject;
            item.transform.SetParent(foodPanel.transform, false);
            item.name = food.name;
            item.transform.FindChild("TextName").GetComponent<Text>().text = food.name;
            item.transform.FindChild("TextIndex").GetComponent<Text>().text = food.index.ToString();


            Toggle toggle = item.GetComponent<Toggle>();
            toggle.onValueChanged.AddListener(
                delegate(bool isOn)
                {
                    this.OnToggleValueChanged(isOn, item);
                }
            );


            toggle.group = foodPanel.GetComponent<ToggleGroup>();
            curFood = null;
        }
        
        buttonAdd.SetActive(true);
        buttonUpdate.SetActive(false);
        buttonDelete.SetActive(false);
    }


    public void OnToggleValueChanged(bool isOn, GameObject obj)
    {
        if (isOn)
        {
            curFood = obj;
            inputFieldIndex.text = obj.transform.FindChild("TextIndex").GetComponent<Text>().text;
            inputFieldName.text = obj.transform.FindChild("TextName").GetComponent<Text>().text;
            buttonAdd.SetActive(false);
            buttonUpdate.SetActive(true);
            buttonDelete.SetActive(true);
        }
    }


obj始终为最后一个实例的obj。


错误原因:函数返回值为IEnumerator。   RefreshFoodInfo() 不能为协程函数。

0 0
原创粉丝点击