using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
using PhxhSDK;
/*
╔═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
║ UIWindow 默认Back按钮处理模块 (Default Back Button) ║
╠═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╣
║ ║
║ 【功能说明】 ║
║ 处理UIWindow的默认"返回"按钮的自动绑定和点击逻辑。 ║
║ 通过约定节点名(BtnBack、BackButton、BtnReturn),框架自动识别并绑定按钮。 ║
║ ║
║ 【使用方式】 ║
║ 1. 默认使用:在预制体中创建约定名称的按钮,无需代码 ║
║ 2. 自定义节点名:重写 DefaultBackButtonNames 虚属性 ║
║ 3. 自定义行为:重写 OnBack() 虚方法(在 UIWindow.Lifecycle.cs 中定义) ║
║ ║
║ 【默认行为】 ║
║ 点击返回按钮 → 调用 Back() → 触发 OnBack() → 使用 BackStrategy ║
║ 与Android返回键/ESC键行为完全一致 ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
*/
///
/// UI窗口基类 - 默认Back按钮处理部分
/// 负责自动识别和绑定预制体中的"返回"按钮
///
public abstract partial class UIWindow
{
#region Default Back Button - 默认返回按钮自动绑定
///
/// 默认返回按钮的节点名配置(子类可重写)
/// 默认支持:BtnBack、BackButton、BtnReturn
///
protected virtual string[] DefaultBackButtonNames => new[] { "BtnBack", "BackButton", "BtnReturn" };
///
/// 绑定所有配置的默认返回按钮
/// 在 DoInit() 阶段自动调用
/// 返回按钮会调用 Back() 方法,触发 OnBack() 虚方法
///
private void BindDefaultBackButtons()
{
foreach (var buttonName in DefaultBackButtonNames)
{
TryBindBackButton(buttonName);
}
}
///
/// 尝试绑定返回按钮(节点不存在时静默跳过)
/// 绑定后,点击按钮会调用 Back() 方法,触发 OnBack() 虚方法
///
private void TryBindBackButton(string nodeName)
{
var trans = transform.Find(nodeName);
if (trans)
{
var btn = trans.GetComponent