您的位置:首页 > 移动开发 > Unity3D

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

2017-02-14 14:56 896 查看
参考: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的滚动!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息