CommonTabsTitle.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { instantiate } from "cc";
  2. import { _decorator, Node } from "cc";
  3. import { Label } from "cc";
  4. import { Component } from "cc";
  5. import { Button } from "cc";
  6. import { UITransform } from "cc";
  7. import { Color } from "cc";
  8. const { ccclass, property } = _decorator;
  9. export interface OnTabClickListener {
  10. onTabClick(index: number);
  11. }
  12. @ccclass("CommonTabsTitle")
  13. export class CommonTabsTitle extends Component {
  14. private _clickDisableIndexes: number[] = [];
  15. setClickDisableIndexes(indexes: number[]) {
  16. this._clickDisableIndexes = indexes;
  17. }
  18. public get selectIndex(): number {
  19. return this._selectIndex;
  20. }
  21. private _listener: OnTabClickListener;
  22. public init(titles: string[], listener: OnTabClickListener) {
  23. this._listener = listener;
  24. let tpl = this.node.children[0];
  25. if (tpl.getComponent(Button) != null) {
  26. tpl.getComponent(Button).clickEvents = [];
  27. } else {
  28. tpl.addComponent(Button);
  29. }
  30. for (let i = this.node.children.length; i < titles.length; i++) {
  31. let tab = instantiate(tpl);
  32. tab.name = "tab_" + i;
  33. tab.setParent(this.node);
  34. }
  35. for (let i = 0; i < this.node.children.length; i++) {
  36. let tab = this.node.children[i];
  37. tab.on(Button.EventType.CLICK, this.Q_Click_Tab, this);
  38. let t = tab.getChildByName("value").getComponent(Label);
  39. t.string = titles[i];
  40. }
  41. // this.setSelect(0);
  42. }
  43. public setSelect(index: number) {
  44. if (index == this._selectIndex) return;
  45. for (let i = 0; i < this.node.children.length; i++) {
  46. this.node.children[i].getChildByName("select").active = i == index;
  47. // this.node.children[i].getChildByName("value").getComponent(Label).color =
  48. // i != index
  49. // ? new Color(255, 255, 255, 255)
  50. // : new Color(192, 242, 131, 255);
  51. }
  52. this._selectIndex = index;
  53. }
  54. private _selectIndex: number = -1;
  55. Q_Click_Tab(event: any) {
  56. console.log("Q_Click_Tab 222", event.target.name);
  57. let index = parseInt(event.target.name.split("_")[1]);
  58. if (index == this._selectIndex) return;
  59. if (
  60. this._clickDisableIndexes &&
  61. this._clickDisableIndexes.indexOf(index) != -1
  62. ) {
  63. // 不可点击的tab
  64. // Tips.show("Coming soon");
  65. return;
  66. }
  67. this.setSelect(index);
  68. this._selectIndex = index;
  69. console.log("onTabClick", index);
  70. console.log(this._listener);
  71. this._listener.onTabClick(index);
  72. }
  73. }