Files
JJBB/Assets/Project/Script/GUI/Base/UiToggleVC.cs

69 lines
1.7 KiB
C#
Raw Normal View History

2024-08-23 15:49:34 +08:00
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
/// <summary>
/// View和Control功能分离的Toggle
/// </summary>
[RequireComponent(typeof(Toggle))]
public class UiToggleVC : MonoBehaviour, IPointerDownHandler
{
private Toggle _toggle;
public event UnityAction<bool> onToggleClick;
private void Awake()
{
_toggle = GetComponent<Toggle>();
_toggle.interactable = false;
var colors = _toggle.colors;
colors.disabledColor = Color.white;
_toggle.colors = colors;
}
public void SetOn(bool isOn)
{
_toggle.isOn = isOn;
}
public void OnPointerDown(PointerEventData eventData)
{
if (onToggleClick != null)
onToggleClick(!_toggle.isOn);
}
}
/// <summary>
/// 用于控制一组UiToggle的工具
/// </summary>
public class UiToggleVCGroup
{
private readonly UiToggleVC[] _toggleVcs;
public event UnityAction<int> onToggleClick;
public UiToggleVCGroup(Toggle[] toggles)
{
_toggleVcs = new UiToggleVC[toggles.Length];
for (var i = 0; i < _toggleVcs.Length; i++)
{
var index = i;
_toggleVcs[i] = toggles[i].gameObject.AddComponent<UiToggleVC>();
_toggleVcs[i].onToggleClick += a =>
{
if (a)
OnToggleClick(index);
};
}
}
public void SetToggle(int index)
{
for (var i = 0; i < _toggleVcs.Length; i++)
_toggleVcs[i].SetOn(index == i);
}
private void OnToggleClick(int index)
{
if (onToggleClick != null)
onToggleClick(index);
}
}