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; /// /// 每个节点的高度 /// public float itemHeight = 28; //public List contents = new List(); public List optionDatas = new List(); 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(); // float contentHeight = Dropdown.options.Count * itemHeight; // float dropHeight = transform.Find("Dropdown List").GetComponent().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 }