參考:
游戲中很多選項卡的UI。
官網教程說的不清楚。以前是用自己寫的。這里用Eui的Tab+ViewStack實現一下。
1. 新建Tab的條目皮膚
第一個Image是按鈕彈起時顯示
第二個Image是按鈕選中時顯示
第三個Label的標簽設置為{data},用於顯示ViewStack的內容name
進入exml的源碼,設置第一張圖片visible.down="false",設置第二張圖片visible.disabled="false", visible.up="false"
2. 拖動一個Tab組件到舞台
設置ID為tab,條目皮膚為TabBarSkin,布局為水平排列HorizontalLayout。
進入exml源碼,設置數據源dataProvider="viewStack",設置默認選擇第一項selectedIndex="0"
3 拖動一個ViewStack到舞台
設置Viewstack的ID為viewstack
拖動3個按鈕(或者自定義UI)到viewstack下,這3個按鈕就相當於要切換的3個頁面。
進入exml源碼,設置按鈕的name,這個name會映射到TabBarSkin上的Labe的{data}上。
4 代碼里操作tab+viewstack
tab監聽ITEM_TAP事件
/** * 主頁 * @author chenkai 2020.2.16 */ class HomeScene extends eui.Component{ public tab:eui.TabBar; public viewStack:eui.ViewStack; public constructor() { super(); this.skinName = "HomeSceneSkin"; } protected childrenCreated(){ this.tab.addEventListener(eui.ItemTapEvent.ITEM_TAP, this.itemTap, this); } private itemTap(e:eui.ItemTapEvent){ //當點擊第一個選項卡按鈕時,下面輸出為 console.log(e.itemIndex, e.itemRenderer); //0 console.log(e.itemRenderer); //第一個選項按鈕實例 console.log(this.viewStack.selectedIndex); //0 console.log(this.viewStack.selectedChild); //viewstack下的第一個Button實例 } }
實際效果:
問題:
1. 當按鈕樣式不同時,怎么整?
因為Tab用的條目皮膚是TabBarSkin是一個皮膚,當3個按鈕,每個按鈕外觀不同時,就用不了了。
Laya的Tab+Viewstack使用方便,支持3個按鈕使用1個皮膚,也支持3個按鈕使用3個皮膚,Egret如果要實現,得自己寫自定義組件了。