UIView.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { _decorator, Component } from 'cc';
  2. import { UICloseReason } from './UILayer';
  3. import { AppKernel } from '../../app/AppKernel';
  4. import type { UIViewID } from '../../define/UIDefine';
  5. const { ccclass } = _decorator;
  6. @ccclass('UIView')
  7. export class UIView<TParams = unknown> extends Component {
  8. /** UIManager 用它识别并接管场景中预放置的 UIView。 */
  9. readonly viewId: UIViewID | null = null;
  10. public getViewID(): UIViewID {
  11. if (!this.viewId) {
  12. return (this?.node?.name || "") as UIViewID;
  13. }
  14. return this.viewId;
  15. }
  16. /**
  17. * 在界面创建完成后、显示前执行;首次打开与缓存界面再次打开时,
  18. * this 都是同一个实际的 UIView 实例。
  19. */
  20. async internalOpenBefore(params: TParams): Promise<boolean> {
  21. return (await this.onBeforeOpen(params)) !== false;
  22. }
  23. internalCreate() {
  24. this.onCreate();
  25. }
  26. async internalOpen(params: TParams): Promise<void> {
  27. this.node.setSiblingIndex(this.node.parent.children.length);
  28. await this.onOpen(params);
  29. }
  30. async internalBeforeClose(reason: UICloseReason): Promise<boolean> {
  31. return this.onBeforeClose(reason);
  32. }
  33. async internalClose(reason: UICloseReason): Promise<void> {
  34. await this.onClose(reason);
  35. }
  36. internalDispose(): void {
  37. this.onDispose();
  38. }
  39. protected onDestroy(): void {
  40. AppKernel.events.offTarget(this);
  41. }
  42. protected async closeSelf() {
  43. await AppKernel.ui.close(this.getViewID());
  44. }
  45. protected onBeforeOpen(_params: TParams): boolean | void | Promise<boolean | void> { return true; }
  46. protected onCreate(): void | Promise<void> { }
  47. protected onOpen(_params: TParams): void | Promise<void> { }
  48. protected onFocus(): void { }
  49. protected onBlur(): void { }
  50. protected onBeforeClose(_reason: UICloseReason): boolean | Promise<boolean> { return true; }
  51. protected onClose(_reason: UICloseReason): void | Promise<void> { }
  52. protected onDispose(): void { }
  53. }