Unity 下拉列表OnValueChanged

unity UGUI下拉列表中,以TMP_Dropdown为例,当默认值为0时,点击第一个选项,点击事件并不会响应,然而在某些特定情况下,我们需要在DropDown的Value字段值不变化时,点击也会响应事件,这样我们就需要重写TMP_DropDown。

代码如下

using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class DBDropDown : TMP_Dropdown, IPointerClickHandler
{
public bool Call = true;//是否开启 点击选项按钮总是回调

protected override void Awake()
{
    base.Awake();
    template = transform.Find("Template").GetComponent<RectTransform>();
    captionText = transform.Find("Label").GetComponent<TMP_Text>();
    itemText = transform.Find("Template/Viewport/Content/Item/Item Label").GetComponent<TMP_Text>();
}

public void MyShow()
{
    Show();
    Transform toggleRoot = transform.Find("Dropdown List/Viewport/Content");
    Toggle[] toggleList = toggleRoot.GetComponentsInChildren<Toggle>(false);
    for (int i = 0; i < toggleList.Length; i++)
    {
        Toggle temp = toggleList[i];
        temp.onValueChanged.RemoveAllListeners();
      //  temp.isOn = false;
        int index = i;
        temp.onValueChanged.AddListener(x => OnSelectItemEx(x,index,temp));
    }
}




public override void OnPointerClick(PointerEventData eventData)
{
    MyShow();
}




public void OnSelectItemEx(bool ison, int index,Toggle  t)
{

    if (!ison)
    {
        if (value == index && Call)
        {
       //     onValueChanged.Invoke(value);
            t.isOn = true;
        }
        captionText.text = options[value].text;
        return;
    }
    captionText.text = options[value].text;
    if (value == index && Call)
        onValueChanged.Invoke(value);
    else
        value = index;

    Hide();
}

}
其中Show和Hide函数是显示与隐藏下拉选项的UI

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值