给UGUI的Button动态添加OnClick监听

下面是我用UGUI的button的onClick.AddListener写的一个添加OnClick的方法

如果有什么不对的地方,多谢大神评论

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;

public class AddDelegateListed : MonoBehaviour {

    public List<Button> btnArray = new List<Button>();
    public Transform[] targets;

 // Use this for initialization
 void Start () {
        //找到该物体的子物体中包含Button组件的gameObject,并添加到btnArray中
        btnArray.AddRange( transform.GetComponentsInChildren<Button>());
        for (int i = 0; i < btnArray.Count; i++)
        {
            //Debug.Log(btnArray[i].name);//检查是否找到button组件
            //int index = i;
            //这里单独定义一个button是为了传递参数,如果不传参数的话可以不用定义的
            //而且传参数不能直接传关于 i 的参数,因为添加delegate的时候OnClick不会被调用,
            //只有点击的时候才会调用,如果传了有关 i 的参数就是最后一个 有关 i 的参数了
            //我试过如果直接传 i 的话,在添加的 delegate 的方法中,打印出来是最后一个 i 的值
 //原因也很简单就是 i 一直是同一个内存地址,每次改变的是 i 的值,所以最后这里只要把 i 改了就传的参也变了
            Button sender = btnArray[i];
            //添加监听的 delegate 参数是一个delegate
            btnArray[i].onClick.AddListener(
                delegate()
                {
                    OnClickAddButton(sender.gameObject);
                });
        }
 }

    private void OnClickAddButton(GameObject index)
    {
        Debug.Log("btnName : " + index.name);
    }
 
 // Update is called once per frame
 void Update () {
 
 }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值