205 lines
6.0 KiB
C#
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
|
|
}
|