Unity3D-关于动态生成的Button和ScrollView冲突的解决方案

参考:http://blog.csdn.net/pz789as/article/details/55099085


一般在做游戏列表的时候,我们通常使用的是ScrollView,然后在代码里面动态的生成一个一个的列表项,而且每个列表项可能需要使用Button,表示点击了哪一个。

但是一般的Button只有一个OnClick,而且还是不带参数的,如果所有按钮都指向同一个回调,那么你根本就不知道是点击了哪一项。这个时候如果没有ScrollView,我们可以使用EventTrigger去做:

EventTrigger trigger = pdObj.AddComponent<EventTrigger>();
				EventTrigger.Entry entry = new EventTrigger.Entry();
				entry.eventID = EventTriggerType.PointerClick;
				int themeIndex = nowCount;
				int packIndex = i;
				entry.callback.AddListener((data)=>{
					OnPackSelect(themeIndex, packIndex);
				});
				trigger.triggers.Add(entry);

我开始也是这么写的,但是因为是放在ScrollView下面,需要点击滑动,可惜的是,这个EventTrigger将drag事件也都截取了,无法传递到ScrollView!但是如果我们直接使用Button自带的OnClick函数就可以,于是就出现了冲突。不过好在我还发现了一个好办法,想法起于上面的EventTrigger,它这里的Callback使用了一个delegate,从这里我们可以知道,在Button的onClick的AddListener也增加一层delegate,然后把需要传递的数据传递下去即可:

int themeIndex = nowCount;
				int packIndex = i;
				Button btnPD = pdObj.GetComponent<Button>();
				btnPD.onClick.AddListener(()=>{
					OnPackSelect(themeIndex, packIndex);
				});

这样得到的结果和上面是一模一样的,而且在点到Button上面时,拖动也可以触发ScrollView的滚动!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏小败在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值