首先在 UI 面板的父类UIBase中写下这些方法
protected _buttonList: Array<UIButton>;
/**
* 注册按钮 在onClick里面,判断按钮的名字以区分点的是哪个按钮
*/
protected registerButtons(container: fairygui.GComponent = null): void {
if (container == null) {
container = this;
}
var childLen: number = container.numChildren;
for (var i: number = 0; i < childLen; i++) {
var child: fairygui.GObject = container.getChildAt(i);
if (child instanceof UIButton) {
this.getButton(child.name, container);
}
}
}
//获得按钮
getButton(resName: string, container: fairygui.GComponent = null): UIButton {
var btn: UIButton = this.getComponent(resName, container) as UIButton;
if (this._buttonList.indexOf(btn) >= 0) {
return btn;
}
this._buttonList.push(btn);
btn.addClickListener(this.onClick, this);
return btn;
}
protected onClick(e: egret.TouchEvent): void {
if (e.currentTarget instanceof UIButton) {
FWFacade.inst.sendNotification(MainNotes.BUTTON_CLICK);
}
}
在移除界面的时候需要注意
if (this._buttonList) {
var btnLen: number = this._buttonList.length;
for (var i: number = 0; i < btnLen; i++) {
var btn: UIButton = this._buttonList[i];
if (btn) {
btn.removeClickListener(this.onClick, this);
btn.dispose();//UIButton里有事件,如果它在组件中被控制器隐藏,在组件dispose的时候,不会移除注册的事件,所以在这dispose一下
}
}
this._buttonList.length = 0;
}
由于在注册监听的时候,有遍历所传组件的子物体,所以界面中如果有按钮,可直接将面板传入registerButtons()方法,可以将面板上的所有按钮全部注册监听事件,在onClick()方法中只需要判断按钮名称.
如:这是一个子类中的方法
protected onClick(e: egret.TouchEvent): void {
super.onClick(e);
switch (e.currentTarget["name"]) {
case "vipTipBtn":
this.onVipTipBtnClick();
break;
case "runeBtn":
this.onRuneBtnClick();d
break;
}
}