egret-docs-master/extension/EUI/dataCollection/tabBar/README.md

86 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

在 [层叠容器](../../container/viewStack/README.md) 章节,我们介绍了 ViewStack而本节介绍的 TabBar 可以用来控制 ViewStack 的显示。TabBar 会根据数据源显示一组按钮并且在同一时间只有一个按钮会被选中并且如果数据源是一个ViewStack 的话,那么 TabBar 的选中项索引将和 ViewStack 的选中项索引保持一致。
## 用法1结合ViewStack
修改 [层叠容器](../../container/viewStack/README.md) 章节的例子,不再用 timer 控制 ViewStack 的切换,而是绑定到 TabBar 上面:
~~~ typescript
class TabBarDemo extends eui.Group {
constructor() {
super();
}
protected createChildren(): void {
super.createChildren();
var theme = new eui.Theme(`resource/default.thm.json`, this.stage);
var exml = `
<e:Skin xmlns:e="http://ns.egret.com/eui" states="up,down" height="50">
<e:Label text="{data}" textColor.down="0xFFFFFF" textColor.up="0x666666" horizontalCenter="0" verticalCenter="0"/>
</e:Skin>`;
var tabBar = new eui.TabBar();
var viewStack = new eui.ViewStack();
viewStack.y = 100;
//创建 3 个 group ,每个 group 里面有 1 个按钮
for (var i: number = 0; i < 3; i ++) {
var group: eui.Group = new eui.Group();
group.name = "Group" + i;
var btn: eui.Button = new eui.Button();
btn.label = "Button" + i;
group.addChild(btn);
viewStack.addChild(group);
}
//将 tabBat 的数据源设置为 viewStack
tabBar.dataProvider = viewStack;
tabBar.itemRendererSkinName = exml;
viewStack.selectedIndex = 1;
this.addChild(viewStack);
this.addChild(tabBar);
}
}
~~~
> 上面代码中为循环产生的group设置了名称(通过name属性)这样TabBar的显示就可以根据Group的名称来做。由于ViewStack实现的是ICollection接口它默认会取子项的name属性就是说想显示在TabBar的文本必须写在子项的name属性上。
通过设置 `TabBar.dataProvider` 等于 ViewStack 实例,来实现两者的绑定。
效果:
![](9-4-tabbar-A.png)
## 用法2结合ArrayCollection
TabBar 也可以单独使用的,将数据源设置为一个 ArrayCollection 实例即可。并且可以通过侦听 `ITEM_TAP` 事件,来获取 TabBar 的选中项。示例代码:
~~~ typescript
class TabBarDemo extends eui.Group {
constructor() {
super();
}
protected createChildren(): void {
super.createChildren();
var theme = new eui.Theme(`resource/default.thm.json`, this.stage);
var exml = `
<e:Skin xmlns:e="http://ns.egret.com/eui" states="up,down" height="50">
<e:Label text="{data}" textColor.down="0xFFFFFF" textColor.up="0x666666" horizontalCenter="0" verticalCenter="0"/>
</e:Skin>`;
var tabBar = new eui.TabBar();
tabBar.dataProvider = new eui.ArrayCollection(["tab1", "tab2", "tab3"]);
tabBar.itemRendererSkinName = exml;
this.addChild(tabBar);
tabBar.addEventListener(eui.ItemTapEvent.ITEM_TAP, this.onBarItemTap, this);
}
private onBarItemTap(e: eui.ItemTapEvent): void {
console.log(e.itemIndex);
}
}
~~~
效果:
![](9-4-tabbar-B.png)