/***********************************************
Copyright (C) 2018 The Company Name
File Name: MultiDropDown.cs
Author: 拾忆丶夜
UnityVersion: #UnityVersion#
CreateTime: 2022/8/18 14:59:14#
Description:
***********************************************/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MultiDropDown : MonoBehaviour
{
public Text valueText;
public RectTransform dropdownScrollView;
public RectTransform content;
public GameObject togglePerfab;
private Toggle selfToggle;
private List<Toggle> toggleList = new List<Toggle>();
private List<Toggle> selectedList = new List<Toggle>();
private RectTransform canvasRect;
private float itemHeight, originalHeight,offset;
void Awake()
{
canvasRect = GameObject.Find("Canvas").GetComponent<RectTransform>();
selfToggle = GetComponent<Toggle>();
selfToggle.onValueChanged.AddListener((ison) =>
{
if (ison)
{
ShowScrollViewOnTopLayer();
}
else
{
HideScrollViewInSlefChildren();
}
});
}
void OnDisable()
{
selfToggle.isOn = false;
}
public void InitScrollView(string[] values)
{
for (int i = 0; i < values.Length; i++)
{
GameObject item = Instantiate(togglePerfab, content);
item.SetActive(true);
Toggle toggle = item.GetComponent<Toggle>();
toggleList.Add(toggle);
Text nameText = item.GetComponentInChildren<Text>();
nameText.text = values[i];
string nowValue = values[i];
toggle.onValueChanged.AddListener((ison) =>
{
if (ison)
{
selectedList.Add(toggle);
}
else
{
selectedList.Remove(toggle);
}
UpdateValueText();
});
}
ResizeContentSize();
SetAsDefault();
}
public void InitScrollView(List<string> values)
{
Debug.Log("初始化下拉框");
for (int i = 0; i < values.Count; i++)
{
GameObject item = Instantiate(togglePerfab, content);
item.SetActive(true);
Toggle toggle = item.GetComponent<Toggle>();
toggleList.Add(toggle);
Text nameText = item.GetComponentInChildren<Text>();
nameText.text = values[i];
string nowValue = values[i];
toggle.onValueChanged.AddListener((ison) =>
{
if (ison)
{
selectedList.Add(toggle);
}
else
{
selectedList.Remove(toggle);
}
UpdateValueText();
});
}
ResizeContentSize();
SetAsDefault();
}
private void UpdateValueText()
{
valueText.text = "";
for (int i = 0; i < selectedList.Count; i++)
{
string a = selectedList[i].GetComponentInChildren<Text>().text;
valueText.text += (valueText.text != "" ? "," : "") + a;
}
}
private void ShowScrollViewOnTopLayer()
{
dropdownScrollView.SetParent(canvasRect);
dropdownScrollView.SetAsLastSibling();
dropdownScrollView.position = transform.position;
dropdownScrollView.gameObject.SetActive(true);
}
private void HideScrollViewInSlefChildren()
{
dropdownScrollView.SetParent(transform.parent);
dropdownScrollView.gameObject.SetActive(false);
}
public void SetAsDefault()
{
Debug.Log("设置为默认");
for (int i = 0; i < toggleList.Count; i++)
{
toggleList[i].isOn = i == 0;
}
}
public void SetAsCustom(string aimValue)
{
foreach (var item in toggleList)
{
item.isOn = false;
}
string[] aimArray = aimValue.Split(',');
for (int i = 0; i < aimArray.Length; i++)
{
var result = toggleList.Find(s => s.GetComponentInChildren<Text>().text == aimArray[i]);
if (result != null)
{
result.isOn = true;
}
}
}
public void ClearOptions()
{
selectedList.Clear();
for (int i = 0; i < toggleList.Count; i++)
{
DestroyImmediate(toggleList[i].gameObject);
}
toggleList.Clear();
}
private void ResizeContentSize()
{
itemHeight = togglePerfab.GetComponent<RectTransform>().rect.height;
originalHeight = content.rect.height;
offset = content.GetComponent<VerticalLayoutGroup>().padding.top + content.GetComponent<VerticalLayoutGroup>().padding.bottom;
float height = toggleList.Count * itemHeight + offset;
Debug.Log("正确高度:" + height);
content.sizeDelta = new Vector2(content.sizeDelta.x, height > originalHeight ? height : originalHeight);
}
}
仅作为记录