在项目开发中,遇到美术的设计效果 想要DropDown的大部分功能又没有默认选中某一个Item的功能。
如果自己做一个Dropdown模拟效果,很难模拟DropList自动关闭的效果。 所以想到了一个比较临时的方法。
在列表的头部加一个测试Item, 在UI扩展里,把第一个Item隐藏掉。
public bool ingoreFirstItem = false;
public override void OnPointerClick(PointerEventData eventData)
{
base.OnPointerClick(eventData);
if (onPointerTemplate != null)
{
onPointerTemplate(owner, eventData);
}
if (tsArrow != null)
{
tsArrow.rotation = Quaternion.Euler(0, 0, defaultAngleZ - 180);
}
OnItemsShow();
}
private void OnItemsShow()
{
if (template == null)
return;
if (Texts == null)
Texts = new List<Text>();
else
Texts.Clear();
Transform dpList = transform.Find("Dropdown List");
if (dpList == null)
return;
DropdownItem[] items = dpList.GetComponentsInChildren<DropdownItem>(false);
if (items == null)
return;
Debug.Log("[DropdownEx] OnItemsShow " + items.Length);
for (int i = 0; i < items.Length; i ++)
{
// 忽略第一個Item
if (i == 0 && ingoreFirstItem)
{
items[i].gameObject.SetActive(false);
}
Texts.Add(items[i].text);
}
if (onItemChange != null)
{
onItemChange(owner, Texts);
}
}