RuralPowerCompetition_yizhe.../RuralPowerCompetition_yizheng1/Assets/Zion/Scripts/FuzzyQuery/FuzzyQuery.cs

205 lines
6.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class FuzzyQuery : MonoBehaviour
{
public Dropdown Dropdown;
public InputField InputField;
public bool ClearOnChange;
/// <summary>
/// 每个节点的高度
/// </summary>
public float itemHeight = 28;
//public List<string> contents = new List<string>();
public List<Dropdown.OptionData> optionDatas = new List<Dropdown.OptionData>();
void Start()
{
InitContent();
#region
//InputField.onEndEdit.AddListener((value) =>
//{
// int index;
// if (string.IsNullOrWhiteSpace(value))
// {
// if (!optionDatas.Count.Equals(Dropdown.options.Count))
// {
// Dropdown.ClearOptions();
// Dropdown.AddOptions(optionDatas);
// }
// InputField.text = Dropdown.options.Count > 0 ? Dropdown.options[0].text : "";
// index = optionDatas.FindIndex(x => x.text.Equals(InputField.text));
// OnValueChanged(index);
// }
// else if (null != optionDatas.Find(x => x.text.Equals(value))) //相等
// {
// if (!optionDatas.Count.Equals(Dropdown.options.Count))
// {
// Dropdown.ClearOptions();
// Dropdown.AddOptions(optionDatas);
// }
// Dropdown.RefreshShownValue();
// InputField.text = value;
// index = optionDatas.FindIndex(x => x.text.Equals(value));
// OnValueChanged(index);
// }
// else
// {
// Dropdown.ClearOptions();
// var x = optionDatas.FindAll(x => x.text.Contains(value));
// Dropdown.AddOptions(x);
// Dropdown.RefreshShownValue();
// InputField.text = Dropdown.options.Count > 0 ? Dropdown.options[0].text : "";
// index = optionDatas.FindIndex(x => x.text.Equals(InputField.text));
// OnValueChanged(index);
// }
// Dropdown.Show();
// RectTransform content = transform.Find("Dropdown List/Viewport/Content").GetComponent<RectTransform>();
// float contentHeight = Dropdown.options.Count * itemHeight;
// float dropHeight = transform.Find("Dropdown List").GetComponent<RectTransform>().sizeDelta.y;
// int dpcount = Dropdown.options.Count;
// float height = itemHeight * index;
// height = height < contentHeight - dropHeight ? height : contentHeight - dropHeight;
// content.anchoredPosition = new Vector2(0, height);
//});
//Dropdown.onValueChanged.AddListener((value) =>
//{
// InputField.text = Dropdown.options[value].text;
// int index = optionDatas.FindIndex(x => x.text.Equals(InputField.text));
// OnValueChanged(index);
// if (ClearOnChange)
// {
// Dropdown.ClearOptions();
// Dropdown.AddOptions(optionDatas);
// }
//});
#endregion
#region
InputField.onValueChanged.AddListener((value) =>
{
CancelInvoke("Check");
if (string.IsNullOrWhiteSpace(value))
{
if (!optionDatas.Count.Equals(Dropdown.options.Count))
{
Dropdown.ClearOptions();
Dropdown.AddOptions(optionDatas);
}
}
else if (null != optionDatas.Find(x => x.text.Equals(value.Trim())))
{
if (!optionDatas.Count.Equals(Dropdown.options.Count))
{
Dropdown.ClearOptions();
Dropdown.AddOptions(optionDatas);
}
Dropdown.RefreshShownValue();
CancelInvoke("ShowDrop");
Invoke("ShowDrop", 0.1f);
}
else
{
Dropdown.ClearOptions();
var x = optionDatas.FindAll(x => x.text.Contains(value.Trim()));
Dropdown.AddOptions(x);
Dropdown.RefreshShownValue();
CancelInvoke("ShowDrop");
Invoke("ShowDrop", 0.1f);
}
});
InputField.onEndEdit.AddListener((value) =>
{
Invoke("Check", 0.1f);
});
Dropdown.onValueChanged.AddListener((value) =>
{
InputField.SetTextWithoutNotify(Dropdown.options[value].text);
int index = optionDatas.FindIndex(x => x.text.Equals(InputField.text));
OnValueChanged(index);
if (ClearOnChange)
{
Dropdown.ClearOptions();
Dropdown.AddOptions(optionDatas);
}
});
#endregion
}
//public void CancleCheck()
//{
// CancelInvoke("Check");
//}
//public static FuzzyQuery instance;
//private void OnEnable()
//{
// instance = this;
//}
public void ShowDrop()
{
Dropdown.Show();
}
public void Check()
{
int _index = 0;
bool _checked = Dropdown.options.Find(x => x.text.Equals(InputField.text)) != null;
if (Dropdown.options.Count > 0 && !_checked)
{
InputField.SetTextWithoutNotify(Dropdown.options[0].text);
_index = optionDatas.FindIndex(x => x.text.Equals(InputField.text));
}
if (_index == 0)
return;
OnValueChanged(_index);
}
public void InitContent()
{
var options = Dropdown.options;
for (int i = 0; i < options.Count; i++)
{
optionDatas.Add(options[i]);
}
InputField.text = options[0].text;
}
#region External
public void OnValueChanged(int index)
{
FailureTicketPanel.instance.OnFourthValueChanged(index);
}
#endregion
}