59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
import { Node, Prefab, instantiate, find } from 'cc';
|
||
|
||
/**
|
||
* Toast 管理器
|
||
* 单例模式,统一管理 Toast 提示的显示
|
||
*/
|
||
export class ToastManager {
|
||
private static _instance: ToastManager | null = null;
|
||
private _prefab: Prefab | null = null;
|
||
private _container: Node | null = null;
|
||
|
||
static get instance(): ToastManager {
|
||
if (!this._instance) {
|
||
this._instance = new ToastManager();
|
||
}
|
||
return this._instance;
|
||
}
|
||
|
||
private constructor() {}
|
||
|
||
/**
|
||
* 初始化 Toast 管理器
|
||
* @param prefab Toast 预制体
|
||
* @param container Toast 容器节点(默认为 Canvas)
|
||
*/
|
||
init(prefab: Prefab, container?: Node): void {
|
||
this._prefab = prefab;
|
||
this._container = container ?? find('Canvas');
|
||
}
|
||
|
||
/**
|
||
* 显示 Toast 提示
|
||
* @param content 提示内容
|
||
* @param duration 显示时长(毫秒),默认 2000ms
|
||
*/
|
||
show(content: string, duration: number = 2000): void {
|
||
if (!this._prefab || !this._container) {
|
||
console.error('[ToastManager] 未初始化,请先调用 init()');
|
||
return;
|
||
}
|
||
|
||
const node = instantiate(this._prefab);
|
||
this._container.addChild(node);
|
||
|
||
// 动态获取 Toast 组件
|
||
const toast = node.getComponent('Toast') as any;
|
||
if (toast && typeof toast.show === 'function') {
|
||
toast.show(content, duration);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 静态快捷方法
|
||
*/
|
||
static show(content: string, duration: number = 2000): void {
|
||
ToastManager.instance.show(content, duration);
|
||
}
|
||
}
|