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

代码:

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() 不能为协程函数。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值