参考: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的滚动!