88 lines
2.7 KiB
C#
88 lines
2.7 KiB
C#
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
namespace Kill.UI.Components
|
||
{
|
||
public class MutiSelectPage : MonoBehaviour
|
||
{
|
||
/// <summary>
|
||
/// 选项背景颜色 0:未选中 1:已选中
|
||
/// </summary>
|
||
public Color[] bgColors;
|
||
public Color[] textColors;
|
||
public List<Button> options = new List<Button>();
|
||
int nowSelectedIndex = -1;
|
||
public Action<int> onConfirm;
|
||
public Button confirmBtn;
|
||
public Button cancelBtn;
|
||
public void Init(int selectedIndex, Action<int> onConfirm)
|
||
{
|
||
confirmBtn.onClick.AddListener(() =>
|
||
{
|
||
Confirm();
|
||
});
|
||
cancelBtn.onClick.AddListener(() =>
|
||
{
|
||
Cancel();
|
||
});
|
||
this.onConfirm = onConfirm;
|
||
nowSelectedIndex = selectedIndex;
|
||
for (int i = 0; i < options.Count; i++)
|
||
{
|
||
int index = i;
|
||
options[i].onClick.RemoveAllListeners();
|
||
options[i].onClick.AddListener(() =>
|
||
{
|
||
OnClickOption(index);
|
||
});
|
||
if (i == selectedIndex)
|
||
{
|
||
options[i].GetComponentInChildren<Text>().color = textColors[1];
|
||
options[i].GetComponent<Image>().color = bgColors[1];
|
||
}
|
||
else
|
||
{
|
||
options[i].GetComponentInChildren<Text>().color = textColors[0];
|
||
options[i].GetComponent<Image>().color = bgColors[0];
|
||
}
|
||
}
|
||
|
||
}
|
||
public void OnClickOption(int index)
|
||
{
|
||
if (nowSelectedIndex == index)
|
||
{
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
nowSelectedIndex = index;
|
||
}
|
||
for (int i = 0; i < options.Count; i++)
|
||
{
|
||
if (i == nowSelectedIndex)
|
||
{
|
||
options[i].GetComponentInChildren<Text>().color = textColors[1];
|
||
options[i].GetComponent<Image>().color = bgColors[1];
|
||
}
|
||
else
|
||
{
|
||
options[i].GetComponentInChildren<Text>().color = textColors[0];
|
||
options[i].GetComponent<Image>().color = bgColors[0];
|
||
}
|
||
}
|
||
}
|
||
public void Confirm()
|
||
{
|
||
onConfirm?.Invoke(nowSelectedIndex);
|
||
Destroy(gameObject);
|
||
}
|
||
public void Cancel()
|
||
{
|
||
Destroy(gameObject);
|
||
}
|
||
}
|
||
}
|