2023-12-28 03:21:40 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using UnityEngine.UI;
|
|
|
|
|
|
|
|
|
|
public abstract class UIPanelBase : UIBase
|
2023-11-07 13:55:35 +00:00
|
|
|
|
{
|
2023-12-28 03:21:40 +00:00
|
|
|
|
private void OnEnable()
|
|
|
|
|
{
|
|
|
|
|
Bind();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnDisable()
|
|
|
|
|
{
|
|
|
|
|
UnBind();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void Bind()
|
|
|
|
|
{
|
|
|
|
|
Type type = GetType();
|
|
|
|
|
var methods = type.GetMethods();
|
|
|
|
|
|
|
|
|
|
foreach (var method in methods)
|
|
|
|
|
{
|
|
|
|
|
var attributes = method.GetCustomAttributes(typeof(UIButtonOnClickAttribute), true);
|
|
|
|
|
if (attributes.Length == 0)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
var attribute = attributes[0] as UIButtonOnClickAttribute;
|
2023-11-07 13:55:35 +00:00
|
|
|
|
|
2023-12-28 03:21:40 +00:00
|
|
|
|
var btns = transform.GetComponentsInChildren<Button>().ToList();
|
|
|
|
|
var button = btns.Find(btns => btns.name == attribute.ButtonName);
|
|
|
|
|
if (button == null)
|
|
|
|
|
continue;
|
|
|
|
|
button.onClick.AddListener(() => { method.Invoke(this, null); });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void UnBind()
|
|
|
|
|
{
|
|
|
|
|
Type type = GetType();
|
|
|
|
|
var methods = type.GetMethods();
|
|
|
|
|
|
|
|
|
|
foreach (var method in methods)
|
|
|
|
|
{
|
|
|
|
|
var attributes = method.GetCustomAttributes(typeof(UIButtonOnClickAttribute), true);
|
|
|
|
|
if (attributes.Length == 0)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
var attribute = attributes[0] as UIButtonOnClickAttribute;
|
|
|
|
|
|
|
|
|
|
var btns = transform.GetComponentsInChildren<Button>().ToList();
|
|
|
|
|
var button = btns.Find(btns => btns.name == attribute.ButtonName);
|
|
|
|
|
if (button == null)
|
|
|
|
|
continue;
|
|
|
|
|
button.onClick.RemoveListener(() => { method.Invoke(this, null); });
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-11-07 13:55:35 +00:00
|
|
|
|
}
|
2023-12-28 03:21:40 +00:00
|
|
|
|
public class UIButtonOnClickAttribute : Attribute
|
|
|
|
|
{
|
|
|
|
|
public string ButtonName { get; private set; }
|
|
|
|
|
public UIButtonOnClickAttribute(string button)
|
|
|
|
|
{
|
|
|
|
|
ButtonName = button;
|
|
|
|
|
}
|
|
|
|
|
}
|